diff options
author | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2016-02-19 18:41:04 +0000 |
---|---|---|
committer | Chris Young <chris@unsatisfactorysoftware.co.uk> | 2016-02-19 18:41:04 +0000 |
commit | 1828079518fbb4d4edf2daec47a7bc74027ff0c9 (patch) | |
tree | 250d821c5dc9156fb4d433fb5ca394bea3bf346f /amiga | |
parent | ebfcc6d9a9c20d1285c228cc596e9f744cbb7821 (diff) | |
download | netsurf-1828079518fbb4d4edf2daec47a7bc74027ff0c9.tar.gz netsurf-1828079518fbb4d4edf2daec47a7bc74027ff0c9.tar.bz2 |
Fix a critical bug in the Amiga frontend which causes NetSurf to never exit.
Avoids looping trying to close a screen for which we are not the owner.
Moves the screen close to the very end of the code so if our own screen doesn't close we can still re-launch NetSurf.
Diffstat (limited to 'amiga')
-rw-r--r-- | amiga/gui.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/amiga/gui.c b/amiga/gui.c index 3d1a87413..4e9e05ef3 100644 --- a/amiga/gui.c +++ b/amiga/gui.c @@ -2966,23 +2966,28 @@ void ami_quit_netsurf_delayed(void) static void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen, BOOL donotwait) { if(scrn == NULL) return; + + if(locked_screen) { + UnlockPubScreen(NULL,scrn); + locked_screen = FALSE; + } + if(CloseScreen(scrn) == TRUE) { - if(locked_screen == FALSE) { + if(screen_signal != -1) { FreeSignal(screen_signal); screen_signal = -1; scrn = NULL; } return; } - if(locked_screen == TRUE) return; if(donotwait == TRUE) return; /* If this is our own screen, wait for visitor windows to close */ - if(screen_signal != -1) { - ULONG scrnsig = 1 << screen_signal; - LOG("Waiting for visitor windows to close... (signal)"); - Wait(scrnsig); - } + if(screen_signal == -1) return; + + ULONG scrnsig = 1 << screen_signal; + LOG("Waiting for visitor windows to close... (signal)"); + Wait(scrnsig); while (CloseScreen(scrn) == FALSE) { LOG("Waiting for visitor windows to close... (polling)"); @@ -3011,10 +3016,6 @@ void ami_try_quit(void) static void gui_quit(void) { - LOG("Closing screen"); - ami_gui_close_screen(scrn, locked_screen, FALSE); - if(nsscreentitle) FreeVec(nsscreentitle); - ami_theme_throbber_free(); urldb_save(nsoption_charp(url_file)); @@ -5704,6 +5705,11 @@ int main(int argc, char** argv) ami_object_fini(); ami_bitmap_fini(); + + LOG("Closing screen"); + ami_gui_close_screen(scrn, locked_screen, FALSE); + if(nsscreentitle) FreeVec(nsscreentitle); + ami_libs_close(); return RETURN_OK; |