Browse Source

[Fix] Oops, fix maps reload

tags/2.2
Vsevolod Stakhov 4 years ago
parent
commit
cdf45ced67
2 changed files with 9 additions and 5 deletions
  1. 9
    4
      src/libutil/map.c
  2. 0
    1
      test/functional/cases/125_map_reload.robot

+ 9
- 4
src/libutil/map.c View File

@@ -1005,8 +1005,12 @@ rspamd_map_schedule_periodic (struct rspamd_map *map, int how)
gdouble timeout;
struct map_periodic_cbdata *cbd;

if (map->scheduled_check || (map->wrk && map->wrk->state == rspamd_worker_state_running)) {
/* Do not schedule check if some check is already scheduled */
if (map->scheduled_check || (map->wrk &&
map->wrk->state != rspamd_worker_state_running)) {
/*
* Do not schedule check if some check is already scheduled or
* if worker is going to die
*/
return;
}

@@ -1860,7 +1864,8 @@ rspamd_map_process_periodic (struct map_periodic_cbdata *cbd)
map->scheduled_check = NULL;

if (!map->file_only && !cbd->locked) {
if (!g_atomic_int_compare_and_exchange (cbd->map->locked, 0, 1)) {
if (!g_atomic_int_compare_and_exchange (cbd->map->locked,
0, 1)) {
msg_debug_map (
"don't try to reread map %s as it is locked by other process, "
"will reread it later", cbd->map->name);
@@ -1901,7 +1906,7 @@ rspamd_map_process_periodic (struct map_periodic_cbdata *cbd)
return;
}

if (!(cbd->map->wrk && cbd->map->wrk->state == rspamd_worker_state_running)) {
if (cbd->map->wrk && cbd->map->wrk->state == rspamd_worker_state_running) {
bk = g_ptr_array_index (cbd->map->backends, cbd->cur_backend);
g_assert (bk != NULL);


+ 0
- 1
test/functional/cases/125_map_reload.robot View File

@@ -18,7 +18,6 @@ CHECK HIT AND MISS
Check Rspamc ${result} MAP_SET_HIT_AND_MISS (1.00)[example.com]

WRITE NEW MAP
Sleep 1s Wait for new time
${TMP_FILE} = Make Temporary File
Copy File ${TESTDIR}/configs/maps/domains.list.2 ${TMP_FILE}
Move File ${TMP_FILE} ${MAP_FILE}

Loading…
Cancel
Save