|
5 | 5 |
|
6 | 6 | #include <stdlib.h>
|
7 | 7 | #include "umm_malloc/umm_malloc.h"
|
| 8 | +extern "C" size_t umm_umul_sat(const size_t a, const size_t b);; |
8 | 9 |
|
9 | 10 | // Need FORCE_ALWAYS_INLINE to put HeapSelect class constructor/deconstructor in IRAM
|
10 | 11 | #define FORCE_ALWAYS_INLINE_HEAP_SELECT
|
@@ -153,7 +154,7 @@ void* _calloc_r(struct _reent* unused, size_t count, size_t size)
|
153 | 154 | {
|
154 | 155 | (void) unused;
|
155 | 156 | void *ret = calloc(count, size);
|
156 |
| - PTR_CHECK__LOG_LAST_FAIL(ret, count * size); |
| 157 | + PTR_CHECK__LOG_LAST_FAIL(ret, umm_umul_sat(count, size)); |
157 | 158 | return ret;
|
158 | 159 | }
|
159 | 160 |
|
@@ -247,8 +248,11 @@ void* IRAM_ATTR calloc(size_t count, size_t size)
|
247 | 248 | INTEGRITY_CHECK__ABORT();
|
248 | 249 | POISON_CHECK__ABORT();
|
249 | 250 | void* ret = UMM_CALLOC(count, size);
|
250 |
| - PTR_CHECK__LOG_LAST_FAIL(ret, count * size); |
251 |
| - OOM_CHECK__PRINT_OOM(ret, size); |
| 251 | + #if defined(DEBUG_ESP_OOM) |
| 252 | + size_t total_size = umm_umul_sat(count, size);// For logging purposes |
| 253 | + #endif |
| 254 | + PTR_CHECK__LOG_LAST_FAIL(ret, total_size); |
| 255 | + OOM_CHECK__PRINT_OOM(ret, total_size); |
252 | 256 | return ret;
|
253 | 257 | }
|
254 | 258 |
|
@@ -287,8 +291,11 @@ void* IRAM_ATTR heap_pvPortCalloc(size_t count, size_t size, const char* file, i
|
287 | 291 | INTEGRITY_CHECK__PANIC_FL(file, line);
|
288 | 292 | POISON_CHECK__PANIC_FL(file, line);
|
289 | 293 | void* ret = UMM_CALLOC(count, size);
|
290 |
| - PTR_CHECK__LOG_LAST_FAIL_FL(ret, count * size, file, line); |
291 |
| - OOM_CHECK__PRINT_LOC(ret, size, file, line); |
| 294 | + #if defined(DEBUG_ESP_OOM) |
| 295 | + size_t total_size = umm_umul_sat(count, size); |
| 296 | + #endif |
| 297 | + PTR_CHECK__LOG_LAST_FAIL_FL(ret, total_size, file, line); |
| 298 | + OOM_CHECK__PRINT_LOC(ret, total_size, file, line); |
292 | 299 | return ret;
|
293 | 300 | }
|
294 | 301 |
|
|
0 commit comments