aboutsummaryrefslogtreecommitdiffstats
path: root/src/worker.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2011-03-28 21:00:38 +0400
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2011-03-28 21:00:38 +0400
commit37d6c7f23fd44283d1853141d39ecc3f3a2c54e6 (patch)
treecaa5cbe2aaca2fb09886d43aeb77dbe2c160c553 /src/worker.c
parent99225e6499d32f2415f64cd9d5d4402d3fb78b30 (diff)
downloadrspamd-37d6c7f23fd44283d1853141d39ecc3f3a2c54e6.tar.gz
rspamd-37d6c7f23fd44283d1853141d39ecc3f3a2c54e6.zip
* Add more timeouts: for fuzzy operations, for worker task operations
Handle miliseconds using a common macro.
Diffstat (limited to 'src/worker.c')
-rw-r--r--src/worker.c46
1 files changed, 25 insertions, 21 deletions
diff --git a/src/worker.c b/src/worker.c
index 8f1177326..f9a6f936e 100644
--- a/src/worker.c
+++ b/src/worker.c
@@ -52,6 +52,9 @@ extern PerlInterpreter *perl_interpreter;
# include <glib/gprintf.h>
#endif
+/* 60 seconds for worker's IO */
+#define DEFAULT_WORKER_IO_TIMEOUT 60000
+
#ifndef BUILD_STATIC
#define MODULE_INIT_FUNC "module_init"
@@ -60,15 +63,14 @@ extern PerlInterpreter *perl_interpreter;
#define MODULE_AFTER_CONNECT_FUNC "after_connect"
#define MODULE_PARSE_LINE_FUNC "parse_line"
-struct custom_filter
-{
- gchar *filename; /*< filename */
- GModule *handle; /*< returned by dlopen */
- void (*init_func) (struct config_file * cfg); /*< called at start of worker */
- void *(*before_connect) (void); /*< called when clients connects */
- gboolean (*process_line) (const gchar * line, size_t len, gchar ** output, void *user_data); /*< called when client send data line */
- void (*after_connect) (gchar ** output, gchar ** log_line, void *user_data); /*< called when client disconnects */
- void (*fin_func) (void);
+struct custom_filter {
+ gchar *filename; /*< filename */
+ GModule *handle; /*< returned by dlopen */
+ void (*init_func) (struct config_file * cfg); /*< called at start of worker */
+ void *(*before_connect) (void); /*< called when clients connects */
+ gboolean (*process_line) (const gchar * line, size_t len, gchar ** output, void *user_data); /*< called when client send data line */
+ void (*after_connect) (gchar ** output, gchar ** log_line, void *user_data); /*< called when client disconnects */
+ void (*fin_func) (void);
};
#endif
@@ -76,16 +78,16 @@ struct custom_filter
/*
* Worker's context
*/
-struct rspamd_worker_ctx
-{
- struct timeval io_tv;
- /* Detect whether this worker is mime worker */
- gboolean is_mime;
- /* Detect whether this worker is mime worker */
- gboolean is_custom;
- GList *custom_filters;
- /* DNS resolver */
- struct rspamd_dns_resolver *resolver;
+struct rspamd_worker_ctx {
+ guint32 timeout;
+ struct timeval io_tv;
+ /* Detect whether this worker is mime worker */
+ gboolean is_mime;
+ /* Detect whether this worker is mime worker */
+ gboolean is_custom;
+ GList *custom_filters;
+ /* DNS resolver */
+ struct rspamd_dns_resolver *resolver;
};
static gboolean write_socket (void *arg);
@@ -603,8 +605,7 @@ accept_socket (gint fd, short what, void *arg)
new_task->is_mime = ctx->is_mime;
worker->srv->stat->connections_count++;
new_task->resolver = ctx->resolver;
- ctx->io_tv.tv_sec = WORKER_IO_TIMEOUT;
- ctx->io_tv.tv_usec = 0;
+ msec_to_tv (ctx->timeout, &ctx->io_tv);
/* Set up dispatcher */
new_task->dispatcher =
@@ -737,7 +738,10 @@ init_worker (void)
ctx = g_malloc0 (sizeof (struct rspamd_worker_ctx));
ctx->is_mime = TRUE;
+ ctx->timeout = DEFAULT_WORKER_IO_TIMEOUT;
+
register_worker_opt (TYPE_WORKER, "mime", xml_handle_boolean, ctx, G_STRUCT_OFFSET (struct rspamd_worker_ctx, is_mime));
+ register_worker_opt (TYPE_WORKER, "timeout", xml_handle_seconds, ctx, G_STRUCT_OFFSET (struct rspamd_worker_ctx, timeout));
return ctx;
}