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 ... */