zmalloc Solaris fixes thanks to Alan Harder

This commit is contained in:
antirez 2009-10-27 09:06:54 +01:00
parent 6e333bbee2
commit d8b5f18f1d

View File

@ -33,6 +33,12 @@
#include <string.h> #include <string.h>
#include "config.h" #include "config.h"
#if defined(__sun)
#define PREFIX_SIZE sizeof(long long)
#else
#define PREFIX_SIZE sizeof(size_t)
#endif
static size_t used_memory = 0; static size_t used_memory = 0;
static void zmalloc_oom(size_t size) { static void zmalloc_oom(size_t size) {
@ -43,7 +49,7 @@ static void zmalloc_oom(size_t size) {
} }
void *zmalloc(size_t size) { void *zmalloc(size_t size) {
void *ptr = malloc(size+sizeof(size_t)); void *ptr = malloc(size+PREFIX_SIZE);
if (!ptr) zmalloc_oom(size); if (!ptr) zmalloc_oom(size);
#ifdef HAVE_MALLOC_SIZE #ifdef HAVE_MALLOC_SIZE
@ -51,8 +57,8 @@ void *zmalloc(size_t size) {
return ptr; return ptr;
#else #else
*((size_t*)ptr) = size; *((size_t*)ptr) = size;
used_memory += size+sizeof(size_t); used_memory += size+PREFIX_SIZE;
return (char*)ptr+sizeof(size_t); return (char*)ptr+PREFIX_SIZE;
#endif #endif
} }
@ -73,15 +79,15 @@ void *zrealloc(void *ptr, size_t size) {
used_memory += redis_malloc_size(newptr); used_memory += redis_malloc_size(newptr);
return newptr; return newptr;
#else #else
realptr = (char*)ptr-sizeof(size_t); realptr = (char*)ptr-PREFIX_SIZE;
oldsize = *((size_t*)realptr); oldsize = *((size_t*)realptr);
newptr = realloc(realptr,size+sizeof(size_t)); newptr = realloc(realptr,size+PREFIX_SIZE);
if (!newptr) zmalloc_oom(size); if (!newptr) zmalloc_oom(size);
*((size_t*)newptr) = size; *((size_t*)newptr) = size;
used_memory -= oldsize; used_memory -= oldsize;
used_memory += size; used_memory += size;
return (char*)newptr+sizeof(size_t); return (char*)newptr+PREFIX_SIZE;
#endif #endif
} }
@ -96,9 +102,9 @@ void zfree(void *ptr) {
used_memory -= redis_malloc_size(ptr); used_memory -= redis_malloc_size(ptr);
free(ptr); free(ptr);
#else #else
realptr = (char*)ptr-sizeof(size_t); realptr = (char*)ptr-PREFIX_SIZE;
oldsize = *((size_t*)realptr); oldsize = *((size_t*)realptr);
used_memory -= oldsize+sizeof(size_t); used_memory -= oldsize+PREFIX_SIZE;
free(realptr); free(realptr);
#endif #endif
} }