@@ -47,6 +47,7 @@ typedef struct {
47
47
} alloc_info_t ;
48
48
49
49
static SingletonPtr<PlatformMutex> malloc_stats_mutex;
50
+ static SingletonPtr<PlatformMutex> mem_trace_mutex;
50
51
static mbed_stats_heap_t heap_stats = {0 , 0 , 0 , 0 , 0 };
51
52
52
53
void 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) {
98
99
ptr = __real__malloc_r (r, size);
99
100
#endif // #ifdef MBED_HEAP_STATS_ENABLED
100
101
#ifdef MBED_MEM_TRACING_ENABLED
102
+ mem_trace_mutex->lock ();
101
103
mbed_mem_trace_malloc (ptr, size, MBED_CALLER_ADDR ());
104
+ mem_trace_mutex->unlock ();
102
105
#endif // #ifdef MBED_MEM_TRACING_ENABLED
103
106
return ptr;
104
107
}
@@ -136,7 +139,9 @@ extern "C" void * __wrap__realloc_r(struct _reent * r, void * ptr, size_t size)
136
139
new_ptr = __real__realloc_r (r, ptr, size);
137
140
#endif // #ifdef MBED_HEAP_STATS_ENABLED
138
141
#ifdef MBED_MEM_TRACING_ENABLED
142
+ mem_trace_mutex->lock ();
139
143
mbed_mem_trace_realloc (new_ptr, ptr, size, MBED_CALLER_ADDR ());
144
+ mem_trace_mutex->unlock ();
140
145
#endif // #ifdef MBED_MEM_TRACING_ENABLED
141
146
return new_ptr;
142
147
}
@@ -156,7 +161,9 @@ extern "C" void __wrap__free_r(struct _reent * r, void * ptr) {
156
161
__real__free_r (r, ptr);
157
162
#endif // #ifdef MBED_HEAP_STATS_ENABLED
158
163
#ifdef MBED_MEM_TRACING_ENABLED
164
+ mem_trace_mutex->lock ();
159
165
mbed_mem_trace_free (ptr, MBED_CALLER_ADDR ());
166
+ mem_trace_mutex->unlock ();
160
167
#endif // #ifdef MBED_MEM_TRACING_ENABLED
161
168
}
162
169
@@ -173,7 +180,9 @@ extern "C" void * __wrap__calloc_r(struct _reent * r, size_t nmemb, size_t size)
173
180
ptr = __real__calloc_r (r, nmemb, size);
174
181
#endif // #ifdef MBED_HEAP_STATS_ENABLED
175
182
#ifdef MBED_MEM_TRACING_ENABLED
183
+ mem_trace_mutex->lock ();
176
184
mbed_mem_trace_calloc (ptr, nmemb, size, MBED_CALLER_ADDR ());
185
+ mem_trace_mutex->unlock ();
177
186
#endif // #ifdef MBED_MEM_TRACING_ENABLED
178
187
return ptr;
179
188
}
@@ -218,7 +227,9 @@ extern "C" void* $Sub$$malloc(size_t size) {
218
227
ptr = $Super$$malloc (size);
219
228
#endif // #ifdef MBED_HEAP_STATS_ENABLED
220
229
#ifdef MBED_MEM_TRACING_ENABLED
230
+ mem_trace_mutex->lock ();
221
231
mbed_mem_trace_malloc (ptr, size, MBED_CALLER_ADDR ());
232
+ mem_trace_mutex->unlock ();
222
233
#endif // #ifdef MBED_MEM_TRACING_ENABLED
223
234
return ptr;
224
235
}
@@ -248,7 +259,9 @@ extern "C" void* $Sub$$realloc(void *ptr, size_t size) {
248
259
free (ptr);
249
260
}
250
261
#else // #ifdef MBED_HEAP_STATS_ENABLED
262
+ mem_trace_mutex->lock ();
251
263
new_ptr = $Super$$realloc (ptr, size);
264
+ mem_trace_mutex->unlock ();
252
265
#endif // #ifdef MBED_HEAP_STATS_ENABLED
253
266
#ifdef MBED_MEM_TRACING_ENABLED
254
267
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) {
268
281
ptr = $Super$$calloc (nmemb, size);
269
282
#endif // #ifdef MBED_HEAP_STATS_ENABLED
270
283
#ifdef MBED_MEM_TRACING_ENABLED
284
+ mem_trace_mutex->lock ();
271
285
mbed_mem_trace_calloc (ptr, nmemb, size, MBED_CALLER_ADDR ());
286
+ mem_trace_mutex->unlock ();
272
287
#endif // #ifdef MBED_MEM_TRACING_ENABLED
273
288
return ptr;
274
289
}
@@ -288,7 +303,9 @@ extern "C" void $Sub$$free(void *ptr) {
288
303
$Super$$free (ptr);
289
304
#endif // #ifdef MBED_HEAP_STATS_ENABLED
290
305
#ifdef MBED_MEM_TRACING_ENABLED
306
+ mem_trace_mutex->lock ();
291
307
mbed_mem_trace_free (ptr, MBED_CALLER_ADDR ());
308
+ mem_trace_mutex->unlock ();
292
309
#endif // #ifdef MBED_MEM_TRACING_ENABLED
293
310
}
294
311
0 commit comments