MCPcopy Create free account
hub / github.com/Snapchat/KeyDB / decrRefCount

Function decrRefCount

src/object.cpp:405–431  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

403}
404
405void decrRefCount(robj_roptr o) {
406 if (o->getrefcount(std::memory_order_relaxed) == OBJ_SHARED_REFCOUNT)
407 return;
408 unsigned prev = o->release();
409 if (prev == 1) {
410 switch(o->type) {
411 case OBJ_STRING: freeStringObject(o); break;
412 case OBJ_LIST: freeListObject(o); break;
413 case OBJ_SET: freeSetObject(o); break;
414 case OBJ_ZSET: freeZsetObject(o); break;
415 case OBJ_HASH: freeHashObject(o); break;
416 case OBJ_MODULE: freeModuleObject(o); break;
417 case OBJ_STREAM: freeStreamObject(o); break;
418 case OBJ_CRON: freeCronObject(o); break;
419 case OBJ_NESTEDHASH: freeNestedHashObject(o); break;
420 default: serverPanic("Unknown object type"); break;
421 }
422 o->~redisObject();
423 if (g_pserver->fActiveReplica) {
424 zfree(reinterpret_cast<redisObjectExtended*>(o.unsafe_robjcast())-1);
425 } else {
426 zfree(o.unsafe_robjcast());
427 }
428 } else {
429 if (prev <= 0) serverPanic("decrRefCount against refcount <= 0");
430 }
431}
432
433/* This variant of decrRefCount() gets its argument as void, and is useful
434 * as free method in data structures that expect a 'void free_object(void*)'

Callers 15

dbOverwriteCoreMethod · 0.85
dbRandomKeyFunction · 0.85
dbUnshareStringValueFunction · 0.85
randomkeyCommandFunction · 0.85
keysCommandCoreFunction · 0.85
scanGenericCommandFunction · 0.85
scanFilterAndReplyFunction · 0.85
renameGenericCommandFunction · 0.85
propagateExpireFunction · 0.85
delKeysInSlotFunction · 0.85
prefetchKeysAsyncMethod · 0.85
pubsubUnsubscribeChannelFunction · 0.85

Calls 13

freeStringObjectFunction · 0.85
freeListObjectFunction · 0.85
freeSetObjectFunction · 0.85
freeZsetObjectFunction · 0.85
freeHashObjectFunction · 0.85
freeModuleObjectFunction · 0.85
freeStreamObjectFunction · 0.85
freeCronObjectFunction · 0.85
freeNestedHashObjectFunction · 0.85
zfreeFunction · 0.85
getrefcountMethod · 0.80
unsafe_robjcastMethod · 0.80

Tested by

no test coverage detected