diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-03-22 22:44:18 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-03-22 22:44:58 +0000 |
commit | fa44ef2fe0e3dca856d110303cd59e07f61aa58b (patch) | |
tree | 787e04edfb5805fae35ec674d9c36595ae0f17b6 /src/libserver/symbols_cache.c | |
parent | bb68a7983c2b17b9acf7ff01e4ba21adbd600845 (diff) | |
download | rspamd-fa44ef2fe0e3dca856d110303cd59e07f61aa58b.tar.gz rspamd-fa44ef2fe0e3dca856d110303cd59e07f61aa58b.zip |
[Minor] Check for duplicates in wait queue for symbols deps
Diffstat (limited to 'src/libserver/symbols_cache.c')
-rw-r--r-- | src/libserver/symbols_cache.c | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/src/libserver/symbols_cache.c b/src/libserver/symbols_cache.c index 428d06b5f..6c0be35d4 100644 --- a/src/libserver/symbols_cache.c +++ b/src/libserver/symbols_cache.c @@ -1381,7 +1381,21 @@ rspamd_symbols_cache_check_deps (struct rspamd_task *task, checkpoint, recursion + 1, check_only)) { - g_ptr_array_add (checkpoint->waitq, item); + gboolean found = FALSE; + guint j; + struct cache_item *tmp_it; + + PTR_ARRAY_FOREACH (checkpoint->waitq, j, tmp_it) { + if (item->id == tmp_it->id) { + found = TRUE; + break; + } + } + + if (!found) { + g_ptr_array_add (checkpoint->waitq, item); + } + ret = FALSE; msg_debug_task ("delayed dependency %d for symbol %d", dep->id, item->id); @@ -1686,10 +1700,25 @@ rspamd_symbols_cache_process_symbols (struct rspamd_task * task, if (!isset (checkpoint->processed_bits, item->id * 2)) { if (!rspamd_symbols_cache_check_deps (task, cache, item, checkpoint, 0, FALSE)) { + gboolean found = FALSE; + guint j; + struct cache_item *tmp_it; + msg_debug_task ("blocked execution of %d unless deps are " - "resolved", + "resolved", item->id); - g_ptr_array_add (checkpoint->waitq, item); + + PTR_ARRAY_FOREACH (checkpoint->waitq, j, tmp_it) { + if (item->id == tmp_it->id) { + found = TRUE; + break; + } + } + + if (!found) { + g_ptr_array_add (checkpoint->waitq, item); + } + continue; } |