diff options
author | Oran Agra <oran@redislabs.com> | 2019-10-04 13:53:40 +0300 |
---|---|---|
committer | Oran Agra <oran@redislabs.com> | 2019-10-04 13:53:40 +0300 |
commit | bf759cc9c3000de05b6591abbfdc9a3450029278 (patch) | |
tree | 7a3332b80529bee13ffac991cdabc652d168398e /src/object.c | |
parent | 2e19b941136ebd4e1d9c4766a040d3148a55d24e (diff) | |
parent | ee1cef189fff604f165b2d20a307545840de944e (diff) | |
download | redis-bf759cc9c3000de05b6591abbfdc9a3450029278.tar.gz |
Merge remote-tracking branch 'antirez/unstable' into jemalloc_purge_bg
Diffstat (limited to 'src/object.c')
-rw-r--r-- | src/object.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/object.c b/src/object.c index 234e11f8a..697429b84 100644 --- a/src/object.c +++ b/src/object.c @@ -467,10 +467,15 @@ robj *tryObjectEncoding(robj *o) { incrRefCount(shared.integers[value]); return shared.integers[value]; } else { - if (o->encoding == OBJ_ENCODING_RAW) sdsfree(o->ptr); - o->encoding = OBJ_ENCODING_INT; - o->ptr = (void*) value; - return o; + if (o->encoding == OBJ_ENCODING_RAW) { + sdsfree(o->ptr); + o->encoding = OBJ_ENCODING_INT; + o->ptr = (void*) value; + return o; + } else if (o->encoding == OBJ_ENCODING_EMBSTR) { + decrRefCount(o); + return createStringObjectFromLongLongForValue(value); + } } } @@ -834,7 +839,9 @@ size_t objectComputeSize(robj *o, size_t sample_size) { d = ((zset*)o->ptr)->dict; zskiplist *zsl = ((zset*)o->ptr)->zsl; zskiplistNode *znode = zsl->header->level[0].forward; - asize = sizeof(*o)+sizeof(zset)+(sizeof(struct dictEntry*)*dictSlots(d)); + asize = sizeof(*o)+sizeof(zset)+sizeof(zskiplist)+sizeof(dict)+ + (sizeof(struct dictEntry*)*dictSlots(d))+ + zmalloc_size(zsl->header); while(znode != NULL && samples < sample_size) { elesize += sdsAllocSize(znode->ele); elesize += sizeof(struct dictEntry) + zmalloc_size(znode); @@ -1433,13 +1440,15 @@ NULL #if defined(USE_JEMALLOC) sds info = sdsempty(); je_malloc_stats_print(inputCatSds, &info, NULL); - addReplyBulkSds(c, info); + addReplyVerbatim(c,info,sdslen(info),"txt"); + sdsfree(info); #else addReplyBulkCString(c,"Stats not supported for the current allocator"); #endif } else if (!strcasecmp(c->argv[1]->ptr,"doctor") && c->argc == 2) { sds report = getMemoryDoctorReport(); - addReplyBulkSds(c,report); + addReplyVerbatim(c,report,sdslen(report),"txt"); + sdsfree(report); } else if (!strcasecmp(c->argv[1]->ptr,"purge") && c->argc == 2) { #if defined(USE_JEMALLOC) char tmp[32]; |