Commit 59c08486 authored by antirez's avatar antirez
Browse files

Force quit when receiving a second SIGINT.

Also quit ASAP when we are still loading a DB, since care is not needed
in this special condition, especially for a SIGINT.
parent 5bc57330
...@@ -766,7 +766,7 @@ int rdbSaveBackground(char *filename) { ...@@ -766,7 +766,7 @@ int rdbSaveBackground(char *filename) {
void rdbRemoveTempFile(pid_t childpid) { void rdbRemoveTempFile(pid_t childpid) {
char tmpfile[256]; char tmpfile[256];
snprintf(tmpfile,256,"temp-%d.rdb", (int) childpid); snprintf(tmpfile,sizeof(tmpfile),"temp-%d.rdb", (int) childpid);
unlink(tmpfile); unlink(tmpfile);
} }
......
...@@ -3413,6 +3413,18 @@ static void sigShutdownHandler(int sig) { ...@@ -3413,6 +3413,18 @@ static void sigShutdownHandler(int sig) {
msg = "Received shutdown signal, scheduling shutdown..."; msg = "Received shutdown signal, scheduling shutdown...";
}; };
/* SIGINT is often delivered via Ctrl+C in an interactive session.
* If we receive the signal the second time, we interpret this as
* the user really wanting to quit ASAP without waiting to persist
* on disk. */
if (server.shutdown_asap && sig == SIGINT) {
redisLogFromHandler(REDIS_WARNING, "You insist... exiting now.");
rdbRemoveTempFile(getpid());
exit(1); /* Exit with an error since this was not a clean shutdown. */
} else if (server.loading) {
exit(0);
}
redisLogFromHandler(REDIS_WARNING, msg); redisLogFromHandler(REDIS_WARNING, msg);
server.shutdown_asap = 1; server.shutdown_asap = 1;
} }
...@@ -3426,7 +3438,7 @@ void setupSignalHandlers(void) { ...@@ -3426,7 +3438,7 @@ void setupSignalHandlers(void) {
act.sa_flags = 0; act.sa_flags = 0;
act.sa_handler = sigShutdownHandler; act.sa_handler = sigShutdownHandler;
sigaction(SIGTERM, &act, NULL); sigaction(SIGTERM, &act, NULL);
signal(SIGINT, sigShutdownHandler); sigaction(SIGINT, &act, NULL);
#ifdef HAVE_BACKTRACE #ifdef HAVE_BACKTRACE
sigemptyset(&act.sa_mask); sigemptyset(&act.sa_mask);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment