Commit 0d1e8c93 authored by Oran Agra's avatar Oran Agra Committed by antirez
Browse files

allow dictFind using static robj

since the recent addition of OBJ_STATIC_REFCOUNT and the assertion in
incrRefCount it is now impossible to use dictFind using a static robj,
because dictEncObjKeyCompare will call getDecodedObject which tries to
increment the refcount just in order to decrement it later.
parent a1bed447
...@@ -1219,10 +1219,15 @@ int dictEncObjKeyCompare(void *privdata, const void *key1, ...@@ -1219,10 +1219,15 @@ int dictEncObjKeyCompare(void *privdata, const void *key1,
o2->encoding == OBJ_ENCODING_INT) o2->encoding == OBJ_ENCODING_INT)
return o1->ptr == o2->ptr; return o1->ptr == o2->ptr;
/* due to OBJ_STATIC_REFCOUNT, we rather not call sdsEncodedObject unnecessarily */
if (!sdsEncodedObject(o1))
o1 = getDecodedObject(o1); o1 = getDecodedObject(o1);
if (!sdsEncodedObject(o2))
o2 = getDecodedObject(o2); o2 = getDecodedObject(o2);
cmp = dictSdsKeyCompare(privdata,o1->ptr,o2->ptr); cmp = dictSdsKeyCompare(privdata,o1->ptr,o2->ptr);
if (o1!=key1)
decrRefCount(o1); decrRefCount(o1);
if (o2!=key2)
decrRefCount(o2); decrRefCount(o2);
return cmp; return cmp;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment