diff --git a/tests/unit.c b/tests/unit.c index 5ccb92ebf..72c51f4ec 100644 --- a/tests/unit.c +++ b/tests/unit.c @@ -324,6 +324,17 @@ exit: err_sys("Failed to free netRandom context"); #endif /* HAVE_WNR */ +#ifdef WOLFSSL_TRACK_MEMORY + if (ret == 0) { + (void)wolfSSL_Cleanup(); + if (wc_MemStats_Ptr->currentBytes > 0) + { + fprintf(stderr, "WOLFSSL_TRACK_MEMORY: currentBytes after cleanup is %ld\n", wc_MemStats_Ptr->currentBytes); + ret = MEMORY_E; + } + } +#endif + if (ret == 0) { puts("\nunit_test: Success for all configured tests."); fflush(stdout); diff --git a/wolfcrypt/src/memory.c b/wolfcrypt/src/memory.c index 4d17bfbfe..8cf3a64d0 100644 --- a/wolfcrypt/src/memory.c +++ b/wolfcrypt/src/memory.c @@ -521,6 +521,11 @@ void* wolfSSL_Realloc(void *ptr, size_t size) } #endif /* WOLFSSL_STATIC_MEMORY */ +#ifdef WOLFSSL_TRACK_MEMORY +#include +WOLFSSL_API memoryStats *wc_MemStats_Ptr; +#endif + #ifdef WOLFSSL_STATIC_MEMORY struct wc_Memory { diff --git a/wolfssl/wolfcrypt/mem_track.h b/wolfssl/wolfcrypt/mem_track.h index c04c74662..300c41cc0 100644 --- a/wolfssl/wolfcrypt/mem_track.h +++ b/wolfssl/wolfcrypt/mem_track.h @@ -133,6 +133,7 @@ typedef struct memoryList { static memoryStats ourMemStats; +WOLFSSL_API extern memoryStats *wc_MemStats_Ptr; #ifdef DO_MEM_LIST #include @@ -384,6 +385,8 @@ static WC_INLINE int InitMemoryTracker(void) #endif } + wc_MemStats_Ptr = &ourMemStats; + return ret; } @@ -427,6 +430,7 @@ static WC_INLINE void ShowMemoryTracker(void) static WC_INLINE int CleanupMemoryTracker(void) { + wc_MemStats_Ptr = NULL; /* restore default allocators */ return wolfSSL_SetAllocators(mfDefault, ffDefault, rfDefault); }