ctx->ev_base = rspamd_prepare_worker (worker, | ctx->ev_base = rspamd_prepare_worker (worker, | ||||
"controller", | "controller", | ||||
rspamd_controller_accept_socket, | |||||
TRUE); | |||||
rspamd_controller_accept_socket); | |||||
msec_to_tv (ctx->timeout, &ctx->io_tv); | msec_to_tv (ctx->timeout, &ctx->io_tv); | ||||
ctx->start_time = time (NULL); | ctx->start_time = time (NULL); | ||||
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver, FALSE); | rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver, FALSE); | ||||
} | } | ||||
rspamd_lua_run_postloads (ctx->cfg->lua_state, ctx->cfg, ctx->ev_base, worker); | |||||
/* Start event loop */ | |||||
event_base_loop (ctx->ev_base, 0); | event_base_loop (ctx->ev_base, 0); | ||||
rspamd_worker_block_signals (); | rspamd_worker_block_signals (); | ||||
ctx->ev_base = rspamd_prepare_worker (worker, | ctx->ev_base = rspamd_prepare_worker (worker, | ||||
"fuzzy", | "fuzzy", | ||||
NULL, | |||||
FALSE); | |||||
NULL); | |||||
ctx->peer_fd = -1; | ctx->peer_fd = -1; | ||||
ctx->worker = worker; | ctx->worker = worker; | ||||
ctx->cfg = worker->srv->cfg; | ctx->cfg = worker->srv->cfg; |
ctx->ev_base = rspamd_prepare_worker (worker, | ctx->ev_base = rspamd_prepare_worker (worker, | ||||
"hs_helper", | "hs_helper", | ||||
NULL, | |||||
FALSE); | |||||
NULL); | |||||
if (!rspamd_rs_compile (ctx, worker, FALSE)) { | if (!rspamd_rs_compile (ctx, worker, FALSE)) { | ||||
/* Tell main not to respawn more workers */ | /* Tell main not to respawn more workers */ |
struct event_base * | struct event_base * | ||||
rspamd_prepare_worker (struct rspamd_worker *worker, const char *name, | rspamd_prepare_worker (struct rspamd_worker *worker, const char *name, | ||||
void (*accept_handler)(int, short, void *), gboolean load_lua) | |||||
void (*accept_handler)(int, short, void *)) | |||||
{ | { | ||||
struct event_base *ev_base; | struct event_base *ev_base; | ||||
struct event *accept_events; | struct event *accept_events; | ||||
} | } | ||||
} | } | ||||
if (load_lua) { | |||||
struct rspamd_config *cfg = worker->srv->cfg; | |||||
rspamd_lua_run_postloads (cfg->lua_state, cfg, ev_base, worker); | |||||
} | |||||
return ev_base; | return ev_base; | ||||
} | } | ||||
*/ | */ | ||||
struct event_base * | struct event_base * | ||||
rspamd_prepare_worker (struct rspamd_worker *worker, const char *name, | rspamd_prepare_worker (struct rspamd_worker *worker, const char *name, | ||||
void (*accept_handler)(int, short, void *), gboolean load_lua); | |||||
void (*accept_handler)(int, short, void *)); | |||||
/** | /** | ||||
* Set special signal handler for a worker | * Set special signal handler for a worker |
ctx->ev_base = rspamd_prepare_worker (worker, | ctx->ev_base = rspamd_prepare_worker (worker, | ||||
"log_helper", | "log_helper", | ||||
NULL, | |||||
TRUE); | |||||
NULL); | |||||
ctx->cfg = worker->srv->cfg; | ctx->cfg = worker->srv->cfg; | ||||
ctx->scripts = worker->cf->scripts; | ctx->scripts = worker->cf->scripts; | ||||
ctx->L = ctx->cfg->lua_state; | ctx->L = ctx->cfg->lua_state; | ||||
rspamd_srv_send_command (worker, ctx->ev_base, &srv_cmd, ctx->pair[1], | rspamd_srv_send_command (worker, ctx->ev_base, &srv_cmd, ctx->pair[1], | ||||
rspamd_log_helper_reply_handler, ctx); | rspamd_log_helper_reply_handler, ctx); | ||||
rspamd_mempool_unlock_mutex (worker->srv->start_mtx); | rspamd_mempool_unlock_mutex (worker->srv->start_mtx); | ||||
rspamd_lua_run_postloads (ctx->cfg->lua_state, ctx->cfg, ctx->ev_base, | |||||
worker); | |||||
event_base_loop (ctx->ev_base, 0); | event_base_loop (ctx->ev_base, 0); | ||||
close (ctx->pair[0]); | close (ctx->pair[0]); | ||||
rspamd_worker_block_signals (); | rspamd_worker_block_signals (); |
ctx->ev_base = rspamd_prepare_worker (worker, | ctx->ev_base = rspamd_prepare_worker (worker, | ||||
"lua_worker", | "lua_worker", | ||||
lua_accept_socket, | |||||
TRUE); | |||||
lua_accept_socket); | |||||
L = worker->srv->cfg->lua_state; | L = worker->srv->cfg->lua_state; | ||||
ctx->L = L; | ctx->L = L; | ||||
exit (EXIT_SUCCESS); | exit (EXIT_SUCCESS); | ||||
} | } | ||||
/* Maps events */ | |||||
rspamd_map_watch (worker->srv->cfg, ctx->ev_base, ctx->resolver, 0); | |||||
rspamd_lua_run_postloads (ctx->cfg->lua_state, ctx->cfg, ctx->ev_base, | |||||
worker); | |||||
event_base_loop (ctx->ev_base, 0); | event_base_loop (ctx->ev_base, 0); | ||||
rspamd_worker_block_signals (); | rspamd_worker_block_signals (); | ||||
ctx->cfg = worker->srv->cfg; | ctx->cfg = worker->srv->cfg; | ||||
ctx->ev_base = rspamd_prepare_worker (worker, "rspamd_proxy", | ctx->ev_base = rspamd_prepare_worker (worker, "rspamd_proxy", | ||||
proxy_accept_socket, | |||||
TRUE); | |||||
proxy_accept_socket); | |||||
ctx->resolver = dns_resolver_init (worker->srv->logger, | ctx->resolver = dns_resolver_init (worker->srv->logger, | ||||
ctx->ev_base, | ctx->ev_base, | ||||
rspamd_milter_init_library (ctx->spam_header, ctx->sessions_cache, | rspamd_milter_init_library (ctx->spam_header, ctx->sessions_cache, | ||||
ctx->discard_on_reject); | ctx->discard_on_reject); | ||||
rspamd_lua_run_postloads (ctx->cfg->lua_state, ctx->cfg, ctx->ev_base, | |||||
worker); | |||||
event_base_loop (ctx->ev_base, 0); | event_base_loop (ctx->ev_base, 0); | ||||
rspamd_worker_block_signals (); | rspamd_worker_block_signals (); |
struct rspamd_worker_ctx *ctx = worker->ctx; | struct rspamd_worker_ctx *ctx = worker->ctx; | ||||
ctx->cfg = worker->srv->cfg; | ctx->cfg = worker->srv->cfg; | ||||
ctx->ev_base = rspamd_prepare_worker (worker, "normal", accept_socket, TRUE); | |||||
ctx->ev_base = rspamd_prepare_worker (worker, "normal", accept_socket); | |||||
msec_to_tv (ctx->timeout, &ctx->io_tv); | msec_to_tv (ctx->timeout, &ctx->io_tv); | ||||
rspamd_symbols_cache_start_refresh (worker->srv->cfg->cache, ctx->ev_base, | rspamd_symbols_cache_start_refresh (worker->srv->cfg->cache, ctx->ev_base, | ||||
worker); | worker); | ||||
/* XXX: stupid default */ | /* XXX: stupid default */ | ||||
ctx->keys_cache = rspamd_keypair_cache_new (256); | ctx->keys_cache = rspamd_keypair_cache_new (256); | ||||
rspamd_worker_init_scanner (worker, ctx->ev_base, ctx->resolver); | rspamd_worker_init_scanner (worker, ctx->ev_base, ctx->resolver); | ||||
rspamd_lua_run_postloads (ctx->cfg->lua_state, ctx->cfg, ctx->ev_base, | |||||
worker); | |||||
event_base_loop (ctx->ev_base, 0); | event_base_loop (ctx->ev_base, 0); | ||||
rspamd_worker_block_signals (); | rspamd_worker_block_signals (); |