summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSalvatore Sanfilippo <antirez@gmail.com>2018-10-01 13:28:53 +0200
committerGitHub <noreply@github.com>2018-10-01 13:28:53 +0200
commit9ce638695cebc0e88f6cad213ecec480c75eee26 (patch)
tree51c2dd8f28d49fcfb7cc5e64ad0c3c848eff5a2e
parentcd2ee8b1139873121cee10916678ed12a4d6b60e (diff)
parent8fd1031b10dec256d5b365b278815f9d8444e601 (diff)
downloadredis-9ce638695cebc0e88f6cad213ecec480c75eee26.tar.gz
Merge pull request #5398 from bmerry/fix-zrealloc-accounting
Fix incorrect memory usage accounting in zrealloc
-rw-r--r--src/server.c2
-rw-r--r--src/zmalloc.c20
-rw-r--r--src/zmalloc.h4
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 */