* Added "bool wait" parameter to ModelLoader::Abort(), allowing to optionally

wait for the loader thread.
* MainWindow::Quit() aborts the loader now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30425 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2009-04-26 11:02:50 +00:00
parent 1ca32f2c10
commit 926160e8ac
3 changed files with 16 additions and 8 deletions
@@ -106,6 +106,9 @@ printf("MSG_MODEL_LOADED_FAILED/MSG_MODEL_LOADED_ABORTED\n");
void void
MainWindow::Quit() MainWindow::Quit()
{ {
if (fModelLoader != NULL)
fModelLoader->Abort(true);
fSubWindowManager->Broadcast(B_QUIT_REQUESTED); fSubWindowManager->Broadcast(B_QUIT_REQUESTED);
be_app->PostMessage(MSG_WINDOW_QUIT); be_app->PostMessage(MSG_WINDOW_QUIT);
@@ -84,10 +84,7 @@ ModelLoader::ModelLoader(DataSource* dataSource,
ModelLoader::~ModelLoader() ModelLoader::~ModelLoader()
{ {
if (fLoaderThread >= 0) { Abort(true);
Abort();
wait_for_thread(fLoaderThread, NULL);
}
delete fDataSource; delete fDataSource;
delete fModel; delete fModel;
@@ -128,14 +125,22 @@ ModelLoader::StartLoading()
void void
ModelLoader::Abort() ModelLoader::Abort(bool wait)
{ {
AutoLocker<BLocker> locker(fLock); AutoLocker<BLocker> locker(fLock);
if (!fLoading || fAborted) if (fLoaderThread < 0)
return; return;
fAborted = true; thread_id thread = fLoaderThread;
if (fLoading)
fAborted = true;
locker.Unlock();
if (wait)
wait_for_thread(thread, NULL);
} }
@@ -27,7 +27,7 @@ public:
~ModelLoader(); ~ModelLoader();
status_t StartLoading(); status_t StartLoading();
void Abort(); void Abort(bool wait);
Model* DetachModel(); Model* DetachModel();