summaryrefslogtreecommitdiff
path: root/src/object.c
diff options
context:
space:
mode:
authorOran Agra <oran@redislabs.com>2019-10-04 13:53:40 +0300
committerOran Agra <oran@redislabs.com>2019-10-04 13:53:40 +0300
commitbf759cc9c3000de05b6591abbfdc9a3450029278 (patch)
tree7a3332b80529bee13ffac991cdabc652d168398e /src/object.c
parent2e19b941136ebd4e1d9c4766a040d3148a55d24e (diff)
parentee1cef189fff604f165b2d20a307545840de944e (diff)
downloadredis-bf759cc9c3000de05b6591abbfdc9a3450029278.tar.gz
Merge remote-tracking branch 'antirez/unstable' into jemalloc_purge_bg
Diffstat (limited to 'src/object.c')
-rw-r--r--src/object.c23
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];