@@ -47,6 +47,7 @@ typedef struct {
4747} alloc_info_t ;
4848
4949static SingletonPtr<PlatformMutex> malloc_stats_mutex;
50+ static SingletonPtr<PlatformMutex> mem_trace_mutex;
5051static mbed_stats_heap_t heap_stats = {0 , 0 , 0 , 0 , 0 };
5152
5253void mbed_stats_heap_get (mbed_stats_heap_t *stats)
@@ -98,7 +99,9 @@ extern "C" void * __wrap__malloc_r(struct _reent * r, size_t size) {
9899 ptr = __real__malloc_r (r, size);
99100#endif // #ifdef MBED_HEAP_STATS_ENABLED
100101#ifdef MBED_MEM_TRACING_ENABLED
102+ mem_trace_mutex->lock ();
101103 mbed_mem_trace_malloc (ptr, size, MBED_CALLER_ADDR ());
104+ mem_trace_mutex->unlock ();
102105#endif // #ifdef MBED_MEM_TRACING_ENABLED
103106 return ptr;
104107}
@@ -136,7 +139,9 @@ extern "C" void * __wrap__realloc_r(struct _reent * r, void * ptr, size_t size)
136139 new_ptr = __real__realloc_r (r, ptr, size);
137140#endif // #ifdef MBED_HEAP_STATS_ENABLED
138141#ifdef MBED_MEM_TRACING_ENABLED
142+ mem_trace_mutex->lock ();
139143 mbed_mem_trace_realloc (new_ptr, ptr, size, MBED_CALLER_ADDR ());
144+ mem_trace_mutex->unlock ();
140145#endif // #ifdef MBED_MEM_TRACING_ENABLED
141146 return new_ptr;
142147}
@@ -156,7 +161,9 @@ extern "C" void __wrap__free_r(struct _reent * r, void * ptr) {
156161 __real__free_r (r, ptr);
157162#endif // #ifdef MBED_HEAP_STATS_ENABLED
158163#ifdef MBED_MEM_TRACING_ENABLED
164+ mem_trace_mutex->lock ();
159165 mbed_mem_trace_free (ptr, MBED_CALLER_ADDR ());
166+ mem_trace_mutex->unlock ();
160167#endif // #ifdef MBED_MEM_TRACING_ENABLED
161168}
162169
@@ -173,7 +180,9 @@ extern "C" void * __wrap__calloc_r(struct _reent * r, size_t nmemb, size_t size)
173180 ptr = __real__calloc_r (r, nmemb, size);
174181#endif // #ifdef MBED_HEAP_STATS_ENABLED
175182#ifdef MBED_MEM_TRACING_ENABLED
183+ mem_trace_mutex->lock ();
176184 mbed_mem_trace_calloc (ptr, nmemb, size, MBED_CALLER_ADDR ());
185+ mem_trace_mutex->unlock ();
177186#endif // #ifdef MBED_MEM_TRACING_ENABLED
178187 return ptr;
179188}
@@ -218,7 +227,9 @@ extern "C" void* $Sub$$malloc(size_t size) {
218227 ptr = $Super$$malloc (size);
219228#endif // #ifdef MBED_HEAP_STATS_ENABLED
220229#ifdef MBED_MEM_TRACING_ENABLED
230+ mem_trace_mutex->lock ();
221231 mbed_mem_trace_malloc (ptr, size, MBED_CALLER_ADDR ());
232+ mem_trace_mutex->unlock ();
222233#endif // #ifdef MBED_MEM_TRACING_ENABLED
223234 return ptr;
224235}
@@ -248,7 +259,9 @@ extern "C" void* $Sub$$realloc(void *ptr, size_t size) {
248259 free (ptr);
249260 }
250261#else // #ifdef MBED_HEAP_STATS_ENABLED
262+ mem_trace_mutex->lock ();
251263 new_ptr = $Super$$realloc (ptr, size);
264+ mem_trace_mutex->unlock ();
252265#endif // #ifdef MBED_HEAP_STATS_ENABLED
253266#ifdef MBED_MEM_TRACING_ENABLED
254267 mbed_mem_trace_realloc (new_ptr, ptr, size, MBED_CALLER_ADDR ());
@@ -268,7 +281,9 @@ extern "C" void *$Sub$$calloc(size_t nmemb, size_t size) {
268281 ptr = $Super$$calloc (nmemb, size);
269282#endif // #ifdef MBED_HEAP_STATS_ENABLED
270283#ifdef MBED_MEM_TRACING_ENABLED
284+ mem_trace_mutex->lock ();
271285 mbed_mem_trace_calloc (ptr, nmemb, size, MBED_CALLER_ADDR ());
286+ mem_trace_mutex->unlock ();
272287#endif // #ifdef MBED_MEM_TRACING_ENABLED
273288 return ptr;
274289}
@@ -288,7 +303,9 @@ extern "C" void $Sub$$free(void *ptr) {
288303 $Super$$free (ptr);
289304#endif // #ifdef MBED_HEAP_STATS_ENABLED
290305#ifdef MBED_MEM_TRACING_ENABLED
306+ mem_trace_mutex->lock ();
291307 mbed_mem_trace_free (ptr, MBED_CALLER_ADDR ());
308+ mem_trace_mutex->unlock ();
292309#endif // #ifdef MBED_MEM_TRACING_ENABLED
293310}
294311
0 commit comments