summaryrefslogtreecommitdiff
path: root/beos
diff options
context:
space:
mode:
authorFrançois Revel <mmu_man@netsurf-browser.org>2010-12-12 01:36:40 +0000
committerFrançois Revel <mmu_man@netsurf-browser.org>2010-12-12 01:36:40 +0000
commita5b5eedd507bf480ed6964fd5ba69e6d89377497 (patch)
treeb0fd74c39190143251c8137f4d3bb2552ca655ff /beos
parent6b5a0c838af50ea805ee2564d1d934e6e01e67ac (diff)
downloadnetsurf-a5b5eedd507bf480ed6964fd5ba69e6d89377497.tar.gz
netsurf-a5b5eedd507bf480ed6964fd5ba69e6d89377497.tar.bz2
Attempt to exit the main loop properly from the replicant view destructor. There are still some issues with multiple instances or on second instanciation though...
svn path=/trunk/netsurf/; revision=11030
Diffstat (limited to 'beos')
-rw-r--r--beos/beos_scaffolding.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/beos/beos_scaffolding.cpp b/beos/beos_scaffolding.cpp
index 265fd2501..2c1987114 100644
--- a/beos/beos_scaffolding.cpp
+++ b/beos/beos_scaffolding.cpp
@@ -151,7 +151,6 @@ struct replicant_thread_info {
};
-
static int open_windows = 0; /**< current number of open browsers */
static struct beos_scaffolding *current_model; /**< current window for model dialogue use */
static NSBaseView *replicant_view = NULL; /**< if not NULL, the replicant View we are running NetSurf for */
@@ -343,6 +342,9 @@ NSBaseView::NSBaseView(BMessage *archive)
NSBaseView::~NSBaseView()
{
//warn_user ("~NSBaseView()", NULL);
+ BMessage *message = new BMessage(B_QUIT_REQUESTED);
+ nsbeos_pipe_message_top(message, NULL, fScaffolding);
+ while (acquire_sem(replicant_done_sem) == EINTR);
}
@@ -517,7 +519,6 @@ NSBaseView::Instantiate(BMessage *archive)
}
resume_thread(nsMainThread);
while (acquire_sem(replicant_done_sem) == EINTR);
- delete_sem(replicant_done_sem);
return view;
}
@@ -612,6 +613,8 @@ int32 nsbeos_replicant_main_thread(void *_arg)
//netsurf_main_loop();
//netsurf_exit();
delete info;
+ //release
+ delete_sem(replicant_done_sem);
return ret;
}
@@ -625,8 +628,10 @@ static void nsbeos_window_destroy_event(NSBrowserWindow *window, nsbeos_scaffold
if (--open_windows == 0)
netsurf_quit = true;
- window->Lock();
- window->Quit();
+ if (window) {
+ window->Lock();
+ window->Quit();
+ }
if (!g->being_destroyed) {
g->being_destroyed = 1;