mirror of
https://github.com/fluencelabs/redis
synced 2025-03-31 14:51:04 +00:00
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.
This commit is contained in:
parent
d99a7246f8
commit
7bb25f8a46
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
src/redis.c
14
src/redis.c
@ -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) {
|
|||||||
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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user