changeset 575:e587ba9d1c87 stable-1.0

Don't force quit in signal handler, since we might double-free things. Instead we set a flag and clean up normally. (transplanted from 7815c90ba55221f47a042339f872207904da0f5c)
author Ryan C. Gordon <icculus@icculus.org>
date Sun, 24 Jan 2010 13:45:18 -0500
parents fa4ea28fd997
children 5c856ac6c58e
files playsound/playsound.c
diffstat 1 files changed, 8 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/playsound/playsound.c	Sun Jan 24 13:29:27 2010 -0500
+++ b/playsound/playsound.c	Sun Jan 24 13:45:18 2010 -0500
@@ -312,22 +312,11 @@
     Uint32 ticks = SDL_GetTicks();
 
     assert(signum == SIGINT);
+    if (done_flag < 0)
+        return;  /* mashing CTRL-C, we get it already. */
 
-    if ((last_sigint != 0) && (ticks - last_sigint < 500))
-    {
-        SDL_PauseAudio(1);
-        SDL_CloseAudio();
-        Sound_Quit();
-        SDL_Quit();
-        deinit_archive();
-        exit(1);
-    } /* if */
-
-    else
-    {
-        last_sigint = ticks;
-        done_flag = 1;
-    } /* else */
+    done_flag = ((last_sigint != 0) && (ticks - last_sigint < 500)) ? -1 : 1;
+    last_sigint = ticks;
 } /* sigint_catcher */
 #endif
 
@@ -1051,12 +1040,15 @@
         Sound_FreeSample(sample);
 
         close_archive(filename);
+
+        if (done_flag < 0)
+            break;
     } /* for */
 
     Sound_Quit();
     SDL_Quit();
     deinit_archive();
-    return(0);
+    return((done_flag < 0) ? 1 : 0);
 } /* main */
 
 /* end of playsound.c ... */