"type", 0, false);
ucl_object_insert_key(obj, ucl_object_frombool(editable),
"editable", 0, false);
- ucl_object_insert_key(obj, ucl_object_frombool(bk->shared->loaded),
+ ucl_object_insert_key(obj, ucl_object_frombool(map->shared->loaded),
"loaded", 0, false);
- ucl_object_insert_key(obj, ucl_object_frombool(bk->shared->cached),
+ ucl_object_insert_key(obj, ucl_object_frombool(map->shared->cached),
"cached", 0, false);
ucl_array_append(top, obj);
}
"type", 0, false);
ucl_object_insert_key(obj, ucl_object_frombool(false),
"editable", 0, false);
- ucl_object_insert_key(obj, ucl_object_frombool(bk->shared->loaded),
+ ucl_object_insert_key(obj, ucl_object_frombool(map->shared->loaded),
"loaded", 0, false);
- ucl_object_insert_key(obj, ucl_object_frombool(bk->shared->cached),
+ ucl_object_insert_key(obj, ucl_object_frombool(map->shared->cached),
"cached", 0, false);
ucl_array_append(top, obj);
}
rspamd_map_traverse(bk->map, rspamd_controller_map_traverse_callback, &map_body, FALSE);
rspamd_http_message_set_body_from_fstring_steal(reply, map_body);
}
- else if (bk->shared->loaded) {
+ else if (map->shared->loaded) {
reply = rspamd_http_new_message(HTTP_RESPONSE);
reply->code = 200;
rspamd_fstring_t *map_body = rspamd_fstring_new();
static void
rspamd_map_unlock_current_backend(struct map_periodic_cbdata *cbd)
{
- struct rspamd_map_backend *bk;
struct rspamd_map *map = cbd->map;
if (cbd->owned_lock && cbd->cur_backend < cbd->map->backends->len) {
- bk = g_ptr_array_index(cbd->map->backends, cbd->cur_backend);
- g_atomic_int_set(&bk->shared->locked, 0);
+ g_atomic_int_set(&map->shared->locked, 0);
cbd->owned_lock = FALSE;
- msg_debug_map("unlocked current backend %s before switching", bk->uri);
+ msg_debug_map("unlocked map %s before switching", map->name);
}
}
cbd->periodic->cur_backend = 0;
/* Reset cache, old cached data will be cleaned on timeout */
g_atomic_int_set(&data->cache->available, 0);
- g_atomic_int_set(&bk->shared->loaded, 0);
+ g_atomic_int_set(&map->shared->loaded, 0);
data->cur_cache_cbd = NULL;
rspamd_map_process_periodic(cbd->periodic);
* We know that a map is in the locked state
*/
g_atomic_int_set(&data->cache->available, 1);
- g_atomic_int_set(&bk->shared->loaded, 1);
- g_atomic_int_set(&bk->shared->cached, 0);
+ g_atomic_int_set(&map->shared->loaded, 1);
+ g_atomic_int_set(&map->shared->cached, 0);
/* Store cached data */
rspamd_strlcpy(data->cache->shmem_name, cbd->shmem_data->shm_name,
sizeof(data->cache->shmem_name));
map->read_callback(NULL, 0, &periodic->cbdata, TRUE);
}
- g_atomic_int_set(&bk->shared->loaded, 1);
+ g_atomic_int_set(&map->shared->loaded, 1);
return TRUE;
}
}
data->processed = TRUE;
- g_atomic_int_set(&bk->shared->loaded, 1);
+ g_atomic_int_set(&map->shared->loaded, 1);
return TRUE;
}
static void
rspamd_map_periodic_dtor(struct map_periodic_cbdata *periodic)
{
- struct rspamd_map *map;
- struct rspamd_map_backend *bk;
-
- map = periodic->map;
+ struct rspamd_map *map = periodic->map;
msg_debug_map("periodic dtor %p; need_modify=%d", periodic, periodic->need_modify);
if (periodic->need_modify || periodic->cbdata.errored) {
if (periodic->owned_lock) {
if (periodic->cur_backend < map->backends->len) {
- bk = (struct rspamd_map_backend *) g_ptr_array_index(map->backends, periodic->cur_backend);
- g_atomic_int_set(&bk->shared->locked, 0);
+ g_atomic_int_set(&map->shared->locked, 0);
msg_debug_map("unlocked map %s", map->name);
}
map->read_callback(in, len, &periodic->cbdata, TRUE);
}
- g_atomic_int_set(&bk->shared->loaded, 1);
- g_atomic_int_set(&bk->shared->cached, 1);
+ g_atomic_int_set(&map->shared->loaded, 1);
+ g_atomic_int_set(&map->shared->cached, 1);
munmap(in, mmap_len);
struct tm tm;
char ncheck_buf[32], lm_buf[32];
- g_atomic_int_set(&bk->shared->loaded, 1);
- g_atomic_int_set(&bk->shared->cached, 1);
+ g_atomic_int_set(&map->shared->loaded, 1);
+ g_atomic_int_set(&map->shared->cached, 1);
rspamd_localtime(map->next_check, &tm);
strftime(ncheck_buf, sizeof(ncheck_buf) - 1, "%Y-%m-%d %H:%M:%S", &tm);
rspamd_localtime(htdata->last_modified, &tm);
(int) data->cache->last_modified);
periodic->need_modify = TRUE;
/* Reset the whole chain */
- g_atomic_int_set(&bk->shared->locked, 0);
+ g_atomic_int_set(&map->shared->locked, 0);
periodic->cur_backend = 0;
rspamd_map_process_periodic(periodic);
}
}
else {
/* Switch to the next backend */
- g_atomic_int_set(&bk->shared->locked, 0);
+ g_atomic_int_set(&map->shared->locked, 0);
periodic->cur_backend++;
rspamd_map_process_periodic(periodic);
}
/* For each backend we need to check for modifications */
if (cbd->cur_backend >= cbd->map->backends->len) {
- /* Last backend - unlock current backend if needed */
- if (cbd->owned_lock) {
- /* Unlock all backends */
- for (unsigned int i = 0; i < cbd->map->backends->len; i++) {
- bk = g_ptr_array_index(cbd->map->backends, i);
- g_atomic_int_set(&bk->shared->locked, 0);
- }
- cbd->owned_lock = FALSE;
- }
+ /* Last backend */
msg_debug_map("finished map: %d of %d", cbd->cur_backend,
cbd->map->backends->len);
MAP_RELEASE(cbd, "periodic");
bk = g_ptr_array_index(map->backends, cbd->cur_backend);
if (!map->file_only && !cbd->owned_lock) {
- if (!g_atomic_int_compare_and_exchange(&bk->shared->locked,
+ if (!g_atomic_int_compare_and_exchange(&map->shared->locked,
0, 1)) {
msg_debug_map(
"don't try to reread map %s as it is locked by other process, "
return;
}
else {
- msg_debug_map("locked map %s (backend: %s)", map->name, bk->uri);
+ msg_debug_map("locked map %s", map->name);
cbd->owned_lock = TRUE;
}
}
rspamd_map_schedule_periodic(cbd->map, RSPAMD_MAP_SCHEDULE_ERROR);
if (cbd->owned_lock) {
- for (unsigned int i = 0; i < cbd->map->backends->len; i++) {
- bk = g_ptr_array_index(cbd->map->backends, i);
- g_atomic_int_set(&bk->shared->locked, 0);
- }
+ g_atomic_int_set(&map->shared->locked, 0);
cbd->owned_lock = FALSE;
}
bk->data.sd = sdata;
}
- bk->shared = rspamd_mempool_alloc0_shared(cfg->cfg_pool,
- sizeof(struct rspamd_map_shared_backend_data));
-
return bk;
err:
map->user_data = user_data;
map->cfg = cfg;
map->id = rspamd_random_uint64_fast();
+ map->shared =
+ rspamd_mempool_alloc0_shared(cfg->cfg_pool, sizeof(struct rspamd_map_shared_data));
map->backends = g_ptr_array_sized_new(1);
map->wrk = worker;
rspamd_mempool_add_destructor(cfg->cfg_pool, rspamd_ptr_array_free_hard,
map->user_data = user_data;
map->cfg = cfg;
map->id = rspamd_random_uint64_fast();
+ map->shared =
+ rspamd_mempool_alloc0_shared(cfg->cfg_pool, sizeof(struct rspamd_map_shared_data));
map->backends = g_ptr_array_new();
map->wrk = worker;
map->no_file_read = (flags & RSPAMD_MAP_FILE_NO_READ);
if (all_loaded) {
/* Static map */
- g_atomic_int_set(&bk->shared->loaded, 1);
+ g_atomic_int_set(&map->shared->loaded, 1);
}
rspamd_map_calculate_hash(map);