Merge pull request #6849 from oranagra/free_client_mutex

freeClientAsync don't lock mutex if there's just one thread
This commit is contained in:
Salvatore Sanfilippo 2020-02-06 10:29:46 +01:00 committed by GitHub
commit 7cf53252ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1163,9 +1163,14 @@ void freeClientAsync(client *c) {
* may access the list while Redis uses I/O threads. All the other accesses * may access the list while Redis uses I/O threads. All the other accesses
* are in the context of the main thread while the other threads are * are in the context of the main thread while the other threads are
* idle. */ * idle. */
static pthread_mutex_t async_free_queue_mutex = PTHREAD_MUTEX_INITIALIZER;
if (c->flags & CLIENT_CLOSE_ASAP || c->flags & CLIENT_LUA) return; if (c->flags & CLIENT_CLOSE_ASAP || c->flags & CLIENT_LUA) return;
c->flags |= CLIENT_CLOSE_ASAP; c->flags |= CLIENT_CLOSE_ASAP;
if (server.io_threads_num == 1) {
/* no need to bother with locking if there's just one thread (the main thread) */
listAddNodeTail(server.clients_to_close,c);
return;
}
static pthread_mutex_t async_free_queue_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&async_free_queue_mutex); pthread_mutex_lock(&async_free_queue_mutex);
listAddNodeTail(server.clients_to_close,c); listAddNodeTail(server.clients_to_close,c);
pthread_mutex_unlock(&async_free_queue_mutex); pthread_mutex_unlock(&async_free_queue_mutex);