Browse Source

Add basic locking.

tags/0.4.5
Vsevolod Stakhov 12 years ago
parent
commit
cbb830d318
1 changed files with 8 additions and 0 deletions
  1. 8
    0
      src/kvstorage_server.c

+ 8
- 0
src/kvstorage_server.c View File

@@ -387,7 +387,9 @@ kvstorage_read_socket (f_str_t * in, void *arg)
rspamd_set_dispatcher_policy (session->dispather, BUFFER_CHARACTER, session->length);
}
else if (session->command == KVSTORAGE_CMD_GET) {
g_static_rw_lock_reader_lock (&session->cf->storage->rwlock);
elt = rspamd_kv_storage_lookup (session->cf->storage, session->key, session->now);
g_static_rw_lock_reader_unlock (&session->cf->storage->rwlock);
if (elt == NULL) {
return rspamd_dispatcher_write (session->dispather, ERROR_NOT_FOUND,
sizeof (ERROR_NOT_FOUND) - 1, FALSE, TRUE);
@@ -407,11 +409,14 @@ 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)) {
g_static_rw_lock_writer_unlock (&session->cf->storage->rwlock);
return rspamd_dispatcher_write (session->dispather, "DELETED" CRLF,
sizeof ("DELETED" CRLF) - 1, FALSE, TRUE);
}
else {
g_static_rw_lock_writer_unlock (&session->cf->storage->rwlock);
return rspamd_dispatcher_write (session->dispather, ERROR_NOT_FOUND,
sizeof (ERROR_NOT_FOUND) - 1, FALSE, TRUE);
}
@@ -426,12 +431,15 @@ kvstorage_read_socket (f_str_t * in, void *arg)
case KVSTORAGE_STATE_READ_DATA:
session->state = KVSTORAGE_STATE_READ_CMD;
rspamd_set_dispatcher_policy (session->dispather, BUFFER_LINE, -1);
g_static_rw_lock_writer_lock (&session->cf->storage->rwlock);
if (rspamd_kv_storage_insert (session->cf->storage, session->key, in->begin, in->len,
session->flags, session->expire)) {
g_static_rw_lock_writer_unlock (&session->cf->storage->rwlock);
return rspamd_dispatcher_write (session->dispather, "STORED" CRLF,
sizeof ("STORED" CRLF) - 1, FALSE, TRUE);
}
else {
g_static_rw_lock_writer_unlock (&session->cf->storage->rwlock);
return rspamd_dispatcher_write (session->dispather, ERROR_NOT_STORED,
sizeof (ERROR_NOT_STORED) - 1, FALSE, TRUE);
}

Loading…
Cancel
Save