48 lines
1.2 KiB
Text
48 lines
1.2 KiB
Text
Don't force quit in signal handler, since we might double-free things.
|
|
|
|
--- playsound/playsound.c.orig Fri Jun 1 02:55:31 2012
|
|
+++ playsound/playsound.c Fri Jun 1 02:57:26 2012
|
|
@@ -312,22 +312,11 @@ void sigint_catcher(int signum)
|
|
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
|
|
|
|
@@ -1050,12 +1039,15 @@ int main(int argc, char **argv)
|
|
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 ... */
|