diff --git a/src/object.cpp b/src/object.cpp index 6ecaf3ba5..bde1bc302 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -102,10 +102,11 @@ robj *createEmbeddedStringObject(const char *ptr, size_t len) { allocsize = sizeof(void*); size_t mvccExtraBytes = g_pserver->fActiveReplica ? sizeof(redisObjectExtended) : 0; - char *oB = (char*)zcalloc(sizeof(robj)+allocsize-sizeof(redisObject::m_ptr)+mvccExtraBytes, MALLOC_SHARED); + char *oB = (char*)zmalloc(sizeof(robj)+allocsize-sizeof(redisObject::m_ptr)+mvccExtraBytes, MALLOC_SHARED); robj *o = reinterpret_cast(oB + mvccExtraBytes); struct sdshdr8 *sh = (sdshdr8*)(&o->m_ptr); + new (o) redisObject; o->type = OBJ_STRING; o->encoding = OBJ_ENCODING_EMBSTR; o->setrefcount(1); diff --git a/src/server.h b/src/server.h index 5aea41b23..fa2183149 100644 --- a/src/server.h +++ b/src/server.h @@ -950,6 +950,7 @@ struct redisObjectExtended { }; typedef struct redisObject { + friend redisObject *createEmbeddedStringObject(const char *ptr, size_t len); protected: redisObject() {}