From 926160e8acf856029ce14aa7358e32148cd55101 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sun, 26 Apr 2009 11:02:50 +0000 Subject: [PATCH] * 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 --- .../gui/main_window/MainWindow.cpp | 3 +++ .../model_loader/ModelLoader.cpp | 19 ++++++++++++------- .../debuganalyzer/model_loader/ModelLoader.h | 2 +- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/apps/debuganalyzer/gui/main_window/MainWindow.cpp b/src/apps/debuganalyzer/gui/main_window/MainWindow.cpp index f11ee912dd..22fd86aa89 100644 --- a/src/apps/debuganalyzer/gui/main_window/MainWindow.cpp +++ b/src/apps/debuganalyzer/gui/main_window/MainWindow.cpp @@ -106,6 +106,9 @@ printf("MSG_MODEL_LOADED_FAILED/MSG_MODEL_LOADED_ABORTED\n"); void MainWindow::Quit() { + if (fModelLoader != NULL) + fModelLoader->Abort(true); + fSubWindowManager->Broadcast(B_QUIT_REQUESTED); be_app->PostMessage(MSG_WINDOW_QUIT); diff --git a/src/apps/debuganalyzer/model_loader/ModelLoader.cpp b/src/apps/debuganalyzer/model_loader/ModelLoader.cpp index ba6a334cea..8e0402f2c6 100644 --- a/src/apps/debuganalyzer/model_loader/ModelLoader.cpp +++ b/src/apps/debuganalyzer/model_loader/ModelLoader.cpp @@ -84,10 +84,7 @@ ModelLoader::ModelLoader(DataSource* dataSource, ModelLoader::~ModelLoader() { - if (fLoaderThread >= 0) { - Abort(); - wait_for_thread(fLoaderThread, NULL); - } + Abort(true); delete fDataSource; delete fModel; @@ -128,14 +125,22 @@ ModelLoader::StartLoading() void -ModelLoader::Abort() +ModelLoader::Abort(bool wait) { AutoLocker locker(fLock); - if (!fLoading || fAborted) + if (fLoaderThread < 0) return; - fAborted = true; + thread_id thread = fLoaderThread; + + if (fLoading) + fAborted = true; + + locker.Unlock(); + + if (wait) + wait_for_thread(thread, NULL); } diff --git a/src/apps/debuganalyzer/model_loader/ModelLoader.h b/src/apps/debuganalyzer/model_loader/ModelLoader.h index 17ee7ab386..a7ca085c4f 100644 --- a/src/apps/debuganalyzer/model_loader/ModelLoader.h +++ b/src/apps/debuganalyzer/model_loader/ModelLoader.h @@ -27,7 +27,7 @@ public: ~ModelLoader(); status_t StartLoading(); - void Abort(); + void Abort(bool wait); Model* DetachModel();