diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-05-09 10:43:12 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-05-09 10:43:12 +0100 |
commit | 4d656c8d0af7e793dbcf29fb2990af09ebdb74f9 (patch) | |
tree | 5110f6bc6fc745323787084ffe49b26cbcee9043 /src/libserver/task.c | |
parent | 8d2e971635ba10355edbd5309c1376a7ad31e2f0 (diff) | |
download | rspamd-4d656c8d0af7e793dbcf29fb2990af09ebdb74f9.tar.gz rspamd-4d656c8d0af7e793dbcf29fb2990af09ebdb74f9.zip |
[Fix] Preserve fd when mapping file to scan
Diffstat (limited to 'src/libserver/task.c')
-rw-r--r-- | src/libserver/task.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/libserver/task.c b/src/libserver/task.c index d0ef40621..b69b96341 100644 --- a/src/libserver/task.c +++ b/src/libserver/task.c @@ -355,6 +355,7 @@ rspamd_task_free (struct rspamd_task *task) struct rspamd_task_map { gpointer begin; gulong len; + gint fd; }; static void @@ -363,6 +364,7 @@ rspamd_task_unmapper (gpointer ud) struct rspamd_task_map *m = ud; munmap (m->begin, m->len); + close (m->fd); } gboolean @@ -437,8 +439,6 @@ rspamd_task_load_message (struct rspamd_task *task, return FALSE; } - close (fd); - tok = rspamd_task_get_request_header (task, "shm-offset"); if (tok) { @@ -448,6 +448,7 @@ rspamd_task_load_message (struct rspamd_task *task, msg_err_task ("invalid offset %ul (%ul available) for shm " "segment %s", offset, st.st_size, fp); munmap (map, st.st_size); + close (fd); return FALSE; } @@ -464,6 +465,7 @@ rspamd_task_load_message (struct rspamd_task *task, msg_err_task ("invalid length %ul (%ul available) for %s " "segment %s", shmem_size, st.st_size, ft, fp); munmap (map, st.st_size); + close (fd); return FALSE; } @@ -474,9 +476,10 @@ rspamd_task_load_message (struct rspamd_task *task, m = rspamd_mempool_alloc (task->task_pool, sizeof (*m)); m->begin = map; m->len = st.st_size; + m->fd = fd; - msg_info_task ("loaded message from shared memory %s (%ul size, %ul offset)", - fp, shmem_size, offset); + msg_info_task ("loaded message from shared memory %s (%ul size, %ul offset), fd=%d", + fp, shmem_size, offset, fd); rspamd_mempool_add_destructor (task->task_pool, rspamd_task_unmapper, m); @@ -540,12 +543,12 @@ rspamd_task_load_message (struct rspamd_task *task, return FALSE; } - close (fd); task->msg.begin = map; task->msg.len = st.st_size; m = rspamd_mempool_alloc (task->task_pool, sizeof (*m)); m->begin = map; m->len = st.st_size; + m->fd = fd; rspamd_mempool_add_destructor (task->task_pool, rspamd_task_unmapper, m); } |