summaryrefslogtreecommitdiff
path: root/amiga
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2014-02-06 21:23:24 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2014-02-06 21:23:24 +0000
commitcd9268761cb9929e397a0f0df135f3ad550ee7a5 (patch)
tree3ebd2bab996ba520b5137bd9b4e175c41ebe52b4 /amiga
parentbf3ed6a67f85928dcfb82a5ea706e3ffed8357a2 (diff)
downloadnetsurf-cd9268761cb9929e397a0f0df135f3ad550ee7a5.tar.gz
netsurf-cd9268761cb9929e397a0f0df135f3ad550ee7a5.tar.bz2
Only allocate a signal for screen closure at the point we need it. This ensures there are enough free signals for popupmenu.library (at the moment, at least)
Diffstat (limited to 'amiga')
-rw-r--r--amiga/gui.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index ece34ea77..772264e97 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -163,7 +163,7 @@ Class *urlStringClass;
BOOL locked_screen = FALSE;
BOOL screen_closed = FALSE;
-ULONG screen_signal = -1;
+
struct MsgPort *applibport = NULL;
ULONG applibsig = 0;
BOOL refresh_search_ico = FALSE;
@@ -443,7 +443,6 @@ void ami_open_resources(void)
ami_file_req_init();
ami_help_init(NULL);
- screen_signal = AllocSignal(-1); /* for screen closure notification */
}
static UWORD ami_system_colour_scrollbar_fgpen(struct DrawInfo *drinfo)
@@ -773,7 +772,6 @@ void ami_openscreen(void)
SA_PubName, "NetSurf",
SA_LikeWorkbench, TRUE,
SA_Compositing, compositing,
- SA_PubSig, screen_signal,
TAG_DONE);
if(scrn)
@@ -2783,20 +2781,26 @@ void ami_quit_netsurf_delayed(void)
void ami_gui_close_screen(struct Screen *scrn, BOOL locked_screen)
{
- ULONG scrnsig = 1 << screen_signal;
+ ULONG screen_signal = -1;
if(scrn == NULL) return;
if(CloseScreen(scrn)) return;
if(locked_screen == TRUE) return;
/* If this is our own screen, wait for visitor windows to close */
- LOG(("Waiting for visitor windows to close... (signal)"));
- Wait(scrnsig);
+ if(screen_signal = AllocSignal(-1) != -1) {
+ ULONG scrnsig = 1 << screen_signal;
+ SetScreenAttr(scrn, SA_PubSig, (APTR)screen_signal, sizeof(ULONG));
+ LOG(("Waiting for visitor windows to close... (signal)"));
+ Wait(scrnsig);
+ }
while (CloseScreen(scrn) == FALSE) {
- LOG(("Still waiting for visitor windows to close... (polling)"));
+ LOG(("Waiting for visitor windows to close... (polling)"));
Delay(50);
}
+
+ FreeSignal(screen_signal);
}
static void gui_quit(void)
@@ -2823,7 +2827,6 @@ static void gui_quit(void)
LOG(("Closing screen"));
ami_gui_close_screen(scrn, locked_screen);
FreeVec(nsscreentitle);
- FreeSignal(screen_signal);
LOG(("Freeing menu items"));
ami_context_menu_free();