diff --git a/src/conio/sdl_con.c b/src/conio/sdl_con.c
index 2c2027074707a7581ace3ab315770f1960394596..db744294f62d4843840c544b8ac4d7461c694eba 100644
--- a/src/conio/sdl_con.c
+++ b/src/conio/sdl_con.c
@@ -1465,6 +1465,17 @@ int win_to_text_ypos(int winpos)
 }
 
 /* Event Thread */
+/*
+ * This function waits 500ms then calls exit().
+ * It's used to handle the "close" button if the program doesn't deal
+ * with CIO_KEY_QUIT.
+ */
+void cheery_reaper(void)
+{
+	SLEEP(500);
+	exit(0);
+}
+
 int sdl_video_event_thread(void *data)
 {
 	SDL_Event	ev;
@@ -1537,6 +1548,7 @@ int sdl_video_event_thread(void *data)
 						break;
 					case SDL_QUIT:
 						sdl_add_key(CIO_KEY_QUIT);
+						cheery_reaper();
 						break;
 					case SDL_VIDEORESIZE:
 						if(ev.resize.w > 0 && ev.resize.h > 0) {