diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2011-11-01 17:29:31 +0300 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2011-11-01 17:29:31 +0300 |
commit | d194a7d577985268ff5f7f29379c90d694a8f230 (patch) | |
tree | 8627220fcdd5d44091b3bdb34bcea9ca82b77143 /src/kvstorage_server.c | |
parent | 48e621e0c0fcaa3bbb788147ccd4fc302c6c929b (diff) | |
download | rspamd-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.c | 7 |
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); |