aboutsummaryrefslogtreecommitdiffstats
path: root/src/kvstorage_server.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2011-11-01 17:29:31 +0300
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2011-11-01 17:29:31 +0300
commitd194a7d577985268ff5f7f29379c90d694a8f230 (patch)
tree8627220fcdd5d44091b3bdb34bcea9ca82b77143 /src/kvstorage_server.c
parent48e621e0c0fcaa3bbb788147ccd4fc302c6c929b (diff)
downloadrspamd-d194a7d577985268ff5f7f29379c90d694a8f230.tar.gz
rspamd-d194a7d577985268ff5f7f29379c90d694a8f230.zip
* Add array operations
Fix memory freeing for elements in kvstorage.
Diffstat (limited to 'src/kvstorage_server.c')
-rw-r--r--src/kvstorage_server.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/kvstorage_server.c b/src/kvstorage_server.c
index 19a4b3b3d..d3bfd8ff6 100644
--- a/src/kvstorage_server.c
+++ b/src/kvstorage_server.c
@@ -367,7 +367,12 @@ kvstorage_read_socket (f_str_t * in, void *arg)
}
else if (session->command == KVSTORAGE_CMD_DELETE) {
g_static_rw_lock_writer_lock (&session->cf->storage->rwlock);
- if (rspamd_kv_storage_delete (session->cf->storage, session->key)) {
+ elt = rspamd_kv_storage_delete (session->cf->storage, session->key);
+ if (elt != NULL) {
+ if ((elt->flags & KV_ELT_DIRTY) == 0) {
+ /* Free memory if backend has deleted this element */
+ g_slice_free1 (elt->size + sizeof (struct rspamd_kv_element), elt);
+ }
g_static_rw_lock_writer_unlock (&session->cf->storage->rwlock);
return rspamd_dispatcher_write (session->dispather, "DELETED" CRLF,
sizeof ("DELETED" CRLF) - 1, FALSE, TRUE);