]> source.dussan.org Git - rspamd.git/commitdiff
Block signals in worker threads.
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 2 Nov 2011 16:19:42 +0000 (19:19 +0300)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 2 Nov 2011 16:19:42 +0000 (19:19 +0300)
src/kvstorage_server.c
src/kvstorage_server.h

index 50497f919989e981f6f26f5f0c7ce2442a216920..0ac84f7a37dcbbc954233c955e63b0b5148d779f 100644 (file)
@@ -480,6 +480,8 @@ kvstorage_thread (gpointer ud)
 {
        struct kvstorage_worker_thread          *thr = ud;
 
+       /* Block signals as it is dispatcher deity */
+       sigprocmask (SIG_BLOCK, thr->signals, NULL);
        /* Init thread specific events */
        thr->ev_base = event_init ();
        event_set (&thr->bind_ev, thr->worker->cf->listen_sock, EV_READ | EV_PERSIST, thr_accept_socket, (void *)thr);
@@ -495,7 +497,7 @@ kvstorage_thread (gpointer ud)
  * Create new thread, set it detached
  */
 static struct kvstorage_worker_thread *
-create_kvstorage_thread (struct rspamd_worker *worker, struct kvstorage_worker_ctx *ctx, guint id)
+create_kvstorage_thread (struct rspamd_worker *worker, struct kvstorage_worker_ctx *ctx, guint id, sigset_t *signals)
 {
        struct kvstorage_worker_thread          *new;
        GError                                                          *err = NULL;
@@ -509,6 +511,7 @@ create_kvstorage_thread (struct rspamd_worker *worker, struct kvstorage_worker_c
        new->id = id;
        new->thr = g_thread_create (kvstorage_thread, new, FALSE, &err);
        new->ev_base = NULL;
+       new->signals = signals;
 
        if (new->thr == NULL) {
                msg_err ("cannot create thread: %s", err->message);
@@ -568,7 +571,7 @@ start_kvstorage_worker (struct rspamd_worker *worker)
        g_static_mutex_init (&ctx->log_mtx);
        g_static_mutex_init (&ctx->accept_mtx);
        for (i = 0; i < worker->cf->count; i ++) {
-               thr = create_kvstorage_thread (worker, ctx, i);
+               thr = create_kvstorage_thread (worker, ctx, i, &signals.sa_mask);
                ctx->threads = g_list_prepend (ctx->threads, thr);
        }
 
index 827b34c9ca6824f02b40a451f35438b86e402e78..808ead805cc7b941c0f58e8afc6ce6f96635b182 100644 (file)
@@ -51,6 +51,7 @@ struct kvstorage_worker_thread {
        GStaticMutex *log_mtx;
        GStaticMutex *accept_mtx;
        guint id;
+       sigset_t *signals;
 };
 
 struct kvstorage_session {