diff --git a/wolfcrypt/src/memory.c b/wolfcrypt/src/memory.c index 06bb8d05c..53ec04dd7 100644 --- a/wolfcrypt/src/memory.c +++ b/wolfcrypt/src/memory.c @@ -46,9 +46,9 @@ /* Set these to default values initially. */ -static wolfSSL_Malloc_cb malloc_function = 0; -static wolfSSL_Free_cb free_function = 0; -static wolfSSL_Realloc_cb realloc_function = 0; +static wolfSSL_Malloc_cb malloc_function = NULL; +static wolfSSL_Free_cb free_function = NULL; +static wolfSSL_Realloc_cb realloc_function = NULL; int wolfSSL_SetAllocators(wolfSSL_Malloc_cb mf, wolfSSL_Free_cb ff, @@ -74,6 +74,16 @@ int wolfSSL_SetAllocators(wolfSSL_Malloc_cb mf, return res; } +int wolfSSL_ResetAllocators(void) +{ + /* allow nulls to be set for callbacks to restore defaults */ + malloc_function = NULL; + free_function = NULL; + realloc_function = NULL; + + return 0; +} + int wolfSSL_GetAllocators(wolfSSL_Malloc_cb* mf, wolfSSL_Free_cb* ff, wolfSSL_Realloc_cb* rf) diff --git a/wolfssl/wolfcrypt/mem_track.h b/wolfssl/wolfcrypt/mem_track.h index afc4d5b1e..4689eb51f 100644 --- a/wolfssl/wolfcrypt/mem_track.h +++ b/wolfssl/wolfcrypt/mem_track.h @@ -237,6 +237,12 @@ (unsigned long)ourMemStats.currentBytes); #endif } + + STATIC WC_INLINE int CleanupMemoryTracker(void) + { + /* restore default allocators */ + return wolfSSL_ResetAllocators(); + } #endif #endif /* USE_WOLFSSL_MEMORY */ diff --git a/wolfssl/wolfcrypt/memory.h b/wolfssl/wolfcrypt/memory.h index ecf4ef03f..d3e74d62c 100644 --- a/wolfssl/wolfcrypt/memory.h +++ b/wolfssl/wolfcrypt/memory.h @@ -77,7 +77,7 @@ WOLFSSL_API int wolfSSL_SetAllocators(wolfSSL_Malloc_cb, wolfSSL_Free_cb, wolfSSL_Realloc_cb); - +WOLFSSL_API int wolfSSL_ResetAllocators(void); WOLFSSL_API int wolfSSL_GetAllocators(wolfSSL_Malloc_cb*, wolfSSL_Free_cb*, wolfSSL_Realloc_cb*);