diff options
author | Salvatore Sanfilippo <antirez@gmail.com> | 2018-10-01 13:28:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-01 13:28:53 +0200 |
commit | 9ce638695cebc0e88f6cad213ecec480c75eee26 (patch) | |
tree | 51c2dd8f28d49fcfb7cc5e64ad0c3c848eff5a2e | |
parent | cd2ee8b1139873121cee10916678ed12a4d6b60e (diff) | |
parent | 8fd1031b10dec256d5b365b278815f9d8444e601 (diff) | |
download | redis-9ce638695cebc0e88f6cad213ecec480c75eee26.tar.gz |
Merge pull request #5398 from bmerry/fix-zrealloc-accounting
Fix incorrect memory usage accounting in zrealloc
-rw-r--r-- | src/server.c | 2 | ||||
-rw-r--r-- | src/zmalloc.c | 20 | ||||
-rw-r--r-- | src/zmalloc.h | 4 |
3 files changed, 24 insertions, 2 deletions
diff --git a/src/server.c b/src/server.c index 821d24b3d..7398252bb 100644 --- a/src/server.c +++ b/src/server.c @@ -4019,6 +4019,8 @@ int main(int argc, char **argv) { return endianconvTest(argc, argv); } else if (!strcasecmp(argv[2], "crc64")) { return crc64Test(argc, argv); + } else if (!strcasecmp(argv[2], "zmalloc")) { + return zmalloc_test(argc, argv); } return -1; /* test not found */ diff --git a/src/zmalloc.c b/src/zmalloc.c index 308774d86..2482f512b 100644 --- a/src/zmalloc.c +++ b/src/zmalloc.c @@ -164,7 +164,7 @@ void *zrealloc(void *ptr, size_t size) { if (!newptr) zmalloc_oom_handler(size); *((size_t*)newptr) = size; - update_zmalloc_stat_free(oldsize); + update_zmalloc_stat_free(oldsize+PREFIX_SIZE); update_zmalloc_stat_alloc(size+PREFIX_SIZE); return (char*)newptr+PREFIX_SIZE; #endif @@ -438,4 +438,20 @@ size_t zmalloc_get_memory_size(void) { #endif } - +#ifdef REDIS_TEST +#define UNUSED(x) ((void)(x)) +int zmalloc_test(int argc, char **argv) { + void *ptr; + + UNUSED(argc); + UNUSED(argv); + printf("Initial used memory: %zu\n", zmalloc_used_memory()); + ptr = zmalloc(123); + printf("Allocated 123 bytes; used: %zu\n", zmalloc_used_memory()); + ptr = zrealloc(ptr, 456); + printf("Reallocated to 456 bytes; used: %zu\n", zmalloc_used_memory()); + zfree(ptr); + printf("Freed pointer; used: %zu\n", zmalloc_used_memory()); + return 0; +} +#endif diff --git a/src/zmalloc.h b/src/zmalloc.h index 9c9229907..6fb19b046 100644 --- a/src/zmalloc.h +++ b/src/zmalloc.h @@ -103,4 +103,8 @@ size_t zmalloc_usable(void *ptr); #define zmalloc_usable(p) zmalloc_size(p) #endif +#ifdef REDIS_TEST +int zmalloc_test(int argc, char **argv); +#endif + #endif /* __ZMALLOC_H */ |