Skip to content

Commit

Permalink
[Fix] Preserve fd when mapping file to scan
Browse files Browse the repository at this point in the history
  • Loading branch information
vstakhov committed May 9, 2019
1 parent 8d2e971 commit 4d656c8
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions src/libserver/task.c
Expand Up @@ -355,6 +355,7 @@ rspamd_task_free (struct rspamd_task *task)
struct rspamd_task_map {
gpointer begin;
gulong len;
gint fd;
};

static void
Expand All @@ -363,6 +364,7 @@ rspamd_task_unmapper (gpointer ud)
struct rspamd_task_map *m = ud;

munmap (m->begin, m->len);
close (m->fd);
}

gboolean
Expand Down Expand Up @@ -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) {
Expand All @@ -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;
}
Expand All @@ -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;
}
Expand All @@ -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);

Expand Down Expand Up @@ -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);
}
Expand Down

0 comments on commit 4d656c8

Please sign in to comment.