diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-10-25 13:58:09 +0200 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-10-25 13:58:34 +0200 |
commit | 8ee425e85963a1fcb1c38f516c51fc3ac98c0528 (patch) | |
tree | ccbe65bdc7407987a0b66be5ee2153b7f468bfad /src/worker.c | |
parent | e3788b3fbf3b4ec6c07ac41676148a22edb908e4 (diff) | |
download | rspamd-8ee425e85963a1fcb1c38f516c51fc3ac98c0528.tar.gz rspamd-8ee425e85963a1fcb1c38f516c51fc3ac98c0528.zip |
[Fix] Fix on_finish scripts and async handlers
Diffstat (limited to 'src/worker.c')
-rw-r--r-- | src/worker.c | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/worker.c b/src/worker.c index fcf4e2c73..fcb9d9fe3 100644 --- a/src/worker.c +++ b/src/worker.c @@ -73,7 +73,19 @@ worker_t normal_worker = { G_STRFUNC, \ __VA_ARGS__) -static void +static gboolean +rspamd_worker_finalize (gpointer user_data) +{ + struct rspamd_task *task = user_data; + struct timeval tv = {.tv_sec = 0, .tv_usec = 0}; + + msg_info_task ("finishing actions has been processed, terminating"); + event_base_loopexit (task->ev_base, &tv); + + return TRUE; +} + +static gboolean rspamd_worker_call_finish_handlers (struct rspamd_worker *worker) { struct rspamd_task *task; @@ -88,7 +100,7 @@ rspamd_worker_call_finish_handlers (struct rspamd_worker *worker) task->resolver = ctx->resolver; task->ev_base = ctx->ev_base; task->s = rspamd_session_create (task->task_pool, - NULL, + rspamd_worker_finalize, NULL, (event_finalizer_t) rspamd_task_free, task); @@ -96,8 +108,13 @@ rspamd_worker_call_finish_handlers (struct rspamd_worker *worker) DL_FOREACH (cfg->finish_callbacks, sc) { lua_call_finish_script (cfg->lua_state, sc, task); } + + if (rspamd_session_pending (task->s)) { + return TRUE; + } } + return FALSE; } /* @@ -558,13 +575,17 @@ init_worker (struct rspamd_config *cfg) return ctx; } -static void +static gboolean rspamd_worker_on_terminate (struct rspamd_worker *worker) { if (worker->nconns == 0) { msg_info ("performing finishing actions"); - rspamd_worker_call_finish_handlers (worker); + if (rspamd_worker_call_finish_handlers (worker)) { + return TRUE; + } } + + return FALSE; } /* |