|
|
|
@ -34,13 +34,33 @@ |
|
|
|
|
#include <grpc/support/alloc.h> |
|
|
|
|
|
|
|
|
|
#include <stdlib.h> |
|
|
|
|
#include <grpc/support/log.h> |
|
|
|
|
#include <grpc/support/port_platform.h> |
|
|
|
|
#include "src/core/profiling/timers.h" |
|
|
|
|
|
|
|
|
|
static void *(*malloc_fn)(size_t size) = malloc; |
|
|
|
|
static void *(*realloc_fn)(void *ptr, size_t size) = realloc; |
|
|
|
|
static void (*free_fn)(void *ptr) = free; |
|
|
|
|
|
|
|
|
|
void gpr_set_malloc(void *(*custom_malloc)(size_t size)) { |
|
|
|
|
GPR_ASSERT(custom_malloc != NULL); |
|
|
|
|
malloc_fn = custom_malloc; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void gpr_set_realloc(void *(*custom_realloc)(void *ptr, size_t size)) { |
|
|
|
|
GPR_ASSERT(custom_realloc != NULL); |
|
|
|
|
realloc_fn = custom_realloc; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void gpr_set_free(void (*custom_free)(void *ptr)) { |
|
|
|
|
GPR_ASSERT(custom_free != NULL); |
|
|
|
|
free_fn = custom_free; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void *gpr_malloc(size_t size) { |
|
|
|
|
void *p; |
|
|
|
|
GPR_TIMER_BEGIN("gpr_malloc", 0); |
|
|
|
|
p = malloc(size); |
|
|
|
|
p = malloc_fn(size); |
|
|
|
|
if (!p) { |
|
|
|
|
abort(); |
|
|
|
|
} |
|
|
|
@ -50,13 +70,13 @@ void *gpr_malloc(size_t size) { |
|
|
|
|
|
|
|
|
|
void gpr_free(void *p) { |
|
|
|
|
GPR_TIMER_BEGIN("gpr_free", 0); |
|
|
|
|
free(p); |
|
|
|
|
free_fn(p); |
|
|
|
|
GPR_TIMER_END("gpr_free", 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void *gpr_realloc(void *p, size_t size) { |
|
|
|
|
GPR_TIMER_BEGIN("gpr_realloc", 0); |
|
|
|
|
p = realloc(p, size); |
|
|
|
|
p = realloc_fn(p, size); |
|
|
|
|
if (!p) { |
|
|
|
|
abort(); |
|
|
|
|
} |
|
|
|
|