summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2016-02-19 18:41:04 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2016-02-19 18:41:04 +0000
commit1828079518fbb4d4edf2daec47a7bc74027ff0c9 (patch)
tree250d821c5dc9156fb4d433fb5ca394bea3bf346f /amiga
parentebfcc6d9a9c20d1285c228cc596e9f744cbb7821 (diff)
downloadnetsurf-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.c28
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;