aboutsummaryrefslogtreecommitdiffstats
path: root/worker.c
diff options
context:
space:
mode:
authorcebka@cebka-laptop <cebka@cebka-laptop>2008-10-14 17:34:56 +0400
committercebka@cebka-laptop <cebka@cebka-laptop>2008-10-14 17:34:56 +0400
commitfee5af783ea49c1fd77e335bb9986fe58152af9a (patch)
tree6f3b5249b3815797d675a5910a61fc1bbc0b6843 /worker.c
parent3f8572f20960a02b334d09c809513d5ab25012a5 (diff)
downloadrspamd-fee5af783ea49c1fd77e335bb9986fe58152af9a.tar.gz
rspamd-fee5af783ea49c1fd77e335bb9986fe58152af9a.zip
* Configure modules when worker starts for simplifying reconfig procedure
* Add two behaviour types of memory allocator: greedy and ungreedy * Adopt surbl module for new configure style
Diffstat (limited to 'worker.c')
-rw-r--r--worker.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/worker.c b/worker.c
index 0b1594ba7..8e09a84d3 100644
--- a/worker.c
+++ b/worker.c
@@ -27,15 +27,9 @@
#include "upstream.h"
#include "cfg_file.h"
#include "url.h"
+#include "modules.h"
-#define CONTENT_LENGTH_HEADER "Content-Length: "
-#define HELO_HEADER "Helo: "
-#define FROM_HEADER "From: "
-#define IP_ADDR_HEADER "IP: "
-#define NRCPT_HEADER "Recipient-Number: "
-#define RCPT_HEADER "Rcpt: "
-
-#define TASK_POOL_SIZE 16384
+#define TASK_POOL_SIZE 4095
const f_str_t CRLF = {
/* begin */"\r\n",
@@ -77,13 +71,9 @@ free_task (struct worker_task *task)
struct mime_part *part;
if (task) {
- if (task->message) {
- g_object_unref (task->message);
- }
if (task->memc_ctx) {
memc_close_ctx (task->memc_ctx);
}
-
while (!TAILQ_EMPTY (&task->parts)) {
part = TAILQ_FIRST (&task->parts);
g_object_unref (part->type);
@@ -178,6 +168,7 @@ process_message (struct worker_task *task)
message = g_mime_parser_construct_message (parser);
task->message = message;
+ memory_pool_add_destructor (task->task_pool, (pool_destruct_func)g_object_unref, task->message);
/* free the parser (and the stream) */
g_object_unref (parser);
@@ -299,7 +290,11 @@ accept_socket (int fd, short what, void *arg)
new_task->cfg = worker->srv->cfg;
TAILQ_INIT (&new_task->urls);
TAILQ_INIT (&new_task->parts);
+#ifdef HAVE_GETPAGESIZE
+ new_task->task_pool = memory_pool_new (getpagesize () - 1);
+#else
new_task->task_pool = memory_pool_new (TASK_POOL_SIZE);
+#endif
new_task->memc_ctx = memory_pool_alloc (new_task->task_pool, sizeof (memcached_ctx_t));
if (new_task->memc_ctx == NULL) {
msg_err ("accept_socket: cannot allocate memory for memcached ctx, %m");
@@ -319,6 +314,9 @@ void
start_worker (struct rspamd_worker *worker, int listen_sock)
{
struct sigaction signals;
+ int i;
+
+
worker->srv->pid = getpid ();
worker->srv->type = TYPE_WORKER;
event_init ();
@@ -335,6 +333,11 @@ start_worker (struct rspamd_worker *worker, int listen_sock)
event_set(&worker->bind_ev, listen_sock, EV_READ | EV_PERSIST, accept_socket, (void *)worker);
event_add(&worker->bind_ev, NULL);
+ /* Perform modules configuring */
+ for (i = 0; i < MODULES_NUM; i ++) {
+ modules[i].module_config_func (worker->srv->cfg);
+ }
+
/* Send SIGUSR2 to parent */
kill (getppid (), SIGUSR2);