Blame SOURCES/memcached-sig-handler.patch

a2abc3
commit 8bbf383316f1bb16e45b05ad6e2ba9def88ba420
a2abc3
Author: Tomas Korbar <tkorbar@redhat.com>
a2abc3
Date:   Mon May 18 14:57:39 2020 +0200
a2abc3
a2abc3
    improve sig_handler function
a2abc3
a2abc3
diff --git a/memcached.c b/memcached.c
a2abc3
index 3916a8c..2547305 100644
a2abc3
--- a/memcached.c
a2abc3
+++ b/memcached.c
a2abc3
@@ -189,7 +189,7 @@ static enum transmit_result transmit(conn *c);
a2abc3
  * can block the listener via a condition.
a2abc3
  */
a2abc3
 static volatile bool allow_new_conns = true;
a2abc3
-static bool stop_main_loop = false;
a2abc3
+static int stop_main_loop = NOT_STOP;
a2abc3
 static struct event maxconnsevent;
a2abc3
 static void maxconns_handler(const int fd, const short which, void *arg) {
a2abc3
     struct timeval t = {.tv_sec = 0, .tv_usec = 10000};
a2abc3
@@ -7850,8 +7850,8 @@ static void remove_pidfile(const char *pid_file) {
a2abc3
 }
a2abc3
 
a2abc3
 static void sig_handler(const int sig) {
a2abc3
+    stop_main_loop = EXIT_NORMALLY;
a2abc3
     printf("Signal handled: %s.\n", strsignal(sig));
a2abc3
-    exit(EXIT_SUCCESS);
a2abc3
 }
a2abc3
 
a2abc3
 static void sighup_handler(const int sig) {
a2abc3
@@ -7860,7 +7860,7 @@ static void sighup_handler(const int sig) {
a2abc3
 
a2abc3
 static void sig_usrhandler(const int sig) {
a2abc3
     printf("Graceful shutdown signal handled: %s.\n", strsignal(sig));
a2abc3
-    stop_main_loop = true;
a2abc3
+    stop_main_loop = GRACE_STOP;
a2abc3
 }
a2abc3
 
a2abc3
 #ifndef HAVE_SIGIGNORE
a2abc3
@@ -9839,7 +9839,18 @@ int main (int argc, char **argv) {
a2abc3
         }
a2abc3
     }
a2abc3
 
a2abc3
-    fprintf(stderr, "Gracefully stopping\n");
a2abc3
+    switch (stop_main_loop) {
a2abc3
+        case GRACE_STOP:
a2abc3
+            fprintf(stderr, "Gracefully stopping\n");
a2abc3
+        break;
a2abc3
+        case EXIT_NORMALLY:
a2abc3
+            fprintf(stderr, "Exiting normally\n");
a2abc3
+        break;
a2abc3
+        default:
a2abc3
+            fprintf(stderr, "Exiting on error\n");
a2abc3
+        break;
a2abc3
+    }
a2abc3
+
a2abc3
     stop_threads();
a2abc3
     int i;
a2abc3
     // FIXME: make a function callable from threads.c
a2abc3
@@ -9848,7 +9859,7 @@ int main (int argc, char **argv) {
a2abc3
             conn_close(conns[i]);
a2abc3
         }
a2abc3
     }
a2abc3
-    if (memory_file != NULL) {
a2abc3
+    if (memory_file != NULL && stop_main_loop == GRACE_STOP) {
a2abc3
         restart_mmap_close();
a2abc3
     }
a2abc3
 
a2abc3
diff --git a/memcached.h b/memcached.h
a2abc3
index 77f52aa..795ea8f 100644
a2abc3
--- a/memcached.h
a2abc3
+++ b/memcached.h
a2abc3
@@ -236,6 +236,12 @@ enum pause_thread_types {
a2abc3
     RESUME_WORKER_THREADS
a2abc3
 };
a2abc3
 
a2abc3
+enum stop_reasons {
a2abc3
+    NOT_STOP,
a2abc3
+    GRACE_STOP,
a2abc3
+    EXIT_NORMALLY
a2abc3
+};
a2abc3
+
a2abc3
 #define IS_TCP(x) (x == tcp_transport)
a2abc3
 #define IS_UDP(x) (x == udp_transport)
a2abc3