|
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