ctdb-cluster-mutex: Reset SIGTERM handler in cluster mutex child
authorMartin Schwenke <martin@meltin.net>
Wed, 12 Sep 2018 04:18:00 +0000 (14:18 +1000)
committerMartin Schwenke <martins@samba.org>
Mon, 17 Sep 2018 20:58:19 +0000 (22:58 +0200)
If SIGTERM is received and the tevent signal handler setup in the
recovery daemon is still enabled then the signal is handled and a
corresponding event is queued.  The child never runs an event loop so
the signal is effectively ignored.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13617

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/server/ctdb_cluster_mutex.c

index 804c6d5dd8ca08989d1a44b3ec0ca3c6b55704cc..e8c75debfb879df898d2aa9eb560ff4d059571c6 100644 (file)
@@ -234,6 +234,16 @@ ctdb_cluster_mutex(TALLOC_CTX *mem_ctx,
        }
 
        if (h->child == 0) {
+               struct sigaction sa = {
+                       .sa_handler = SIG_DFL,
+               };
+
+               ret = sigaction(SIGTERM, &sa, NULL);
+               if (ret != 0) {
+                       DBG_WARNING("Failed to reset signal handler (%d)\n",
+                                   errno);
+               }
+
                /* Make stdout point to the pipe */
                close(STDOUT_FILENO);
                dup2(h->fd[1], STDOUT_FILENO);