mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 08:08:53 -05:00
fix rare condition where 'key' would already be destroyed while is was needed later on
This commit is contained in:
parent
2f996f0217
commit
c8a10631d1
6
src/vm.c
6
src/vm.c
@ -1075,6 +1075,11 @@ int dontWaitForSwappedKey(redisClient *c, robj *key) {
|
||||
listIter li;
|
||||
struct dictEntry *de;
|
||||
|
||||
/* The key object might be destroyed when deleted from the c->io_keys
|
||||
* list (and the "key" argument is physically the same object as the
|
||||
* object inside the list), so we need to protect it. */
|
||||
incrRefCount(key);
|
||||
|
||||
/* Remove the key from the list of keys this client is waiting for. */
|
||||
listRewind(c->io_keys,&li);
|
||||
while ((ln = listNext(&li)) != NULL) {
|
||||
@ -1095,6 +1100,7 @@ int dontWaitForSwappedKey(redisClient *c, robj *key) {
|
||||
if (listLength(l) == 0)
|
||||
dictDelete(c->db->io_keys,key);
|
||||
|
||||
decrRefCount(key);
|
||||
return listLength(c->io_keys) == 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user