From dc7f3fefad5f136c0655734a35ae624758d73845 Mon Sep 17 00:00:00 2001 From: Dvir Volk Date: Wed, 22 Jun 2016 17:32:41 +0300 Subject: [PATCH] added RM_Calloc implementation --- src/module.c | 11 ++++++++++- src/redismodule.h | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/module.c b/src/module.c index 54f27907..56f225ab 100644 --- a/src/module.c +++ b/src/module.c @@ -172,11 +172,19 @@ void RM_ZsetRangeStop(RedisModuleKey *key); /* Use like malloc(). Memory allocated with this function is reported in * Redis INFO memory, used for keys eviction according to maxmemory settings * and in general is taken into account as memory allocated by Redis. - * You should avoid to use malloc(). */ + * You should avoid using malloc(). */ void *RM_Alloc(size_t bytes) { return zmalloc(bytes); } +/* Use like calloc(). Memory allocated with this function is reported in + * Redis INFO memory, used for keys eviction according to maxmemory settings + * and in general is taken into account as memory allocated by Redis. + * You should avoid using calloc() directly. */ +void *RM_Calloc(size_t nmemb, size_t size) { + return zcalloc(nmemb*size); +} + /* Use like realloc() for memory obtained with RedisModule_Alloc(). */ void* RM_Realloc(void *ptr, size_t bytes) { return zrealloc(ptr,bytes); @@ -2791,6 +2799,7 @@ int moduleRegisterApi(const char *funcname, void *funcptr) { void moduleRegisterCoreAPI(void) { server.moduleapi = dictCreate(&moduleAPIDictType,NULL); REGISTER_API(Alloc); + REGISTER_API(Calloc); REGISTER_API(Realloc); REGISTER_API(Free); REGISTER_API(Strdup); diff --git a/src/redismodule.h b/src/redismodule.h index 618b39e4..080d3fd1 100644 --- a/src/redismodule.h +++ b/src/redismodule.h @@ -96,9 +96,11 @@ typedef void (*RedisModuleTypeFreeFunc)(void *value); #define REDISMODULE_API_FUNC(x) (*x) + void *REDISMODULE_API_FUNC(RedisModule_Alloc)(size_t bytes); void *REDISMODULE_API_FUNC(RedisModule_Realloc)(void *ptr, size_t bytes); void REDISMODULE_API_FUNC(RedisModule_Free)(void *ptr); +void REDISMODULE_API_FUNC(RedisModule_Calloc)(size_t nmemb, size_t size); char *REDISMODULE_API_FUNC(RedisModule_Strdup)(const char *str); int REDISMODULE_API_FUNC(RedisModule_GetApi)(const char *, void *); int REDISMODULE_API_FUNC(RedisModule_CreateCommand)(RedisModuleCtx *ctx, const char *name, RedisModuleCmdFunc cmdfunc, const char *strflags, int firstkey, int lastkey, int keystep); @@ -187,6 +189,7 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int void *getapifuncptr = ((void**)ctx)[0]; RedisModule_GetApi = (int (*)(const char *, void *)) (unsigned long)getapifuncptr; REDISMODULE_GET_API(Alloc); + REDISMODULE_GET_API(Calloc); REDISMODULE_GET_API(Free); REDISMODULE_GET_API(Realloc); REDISMODULE_GET_API(Strdup);