diff --git a/jerry-core/jmem/jmem-heap.c b/jerry-core/jmem/jmem-heap.c index f93e82f2f..a2b9c9d0f 100644 --- a/jerry-core/jmem/jmem-heap.c +++ b/jerry-core/jmem/jmem-heap.c @@ -649,7 +649,15 @@ jmem_heap_realloc_block (void *ptr, /**< memory region to reallocate */ JMEM_HEAP_STAT_ALLOC (new_size); return ret_block_p; #else /* ENABLED (JERRY_SYSTEM_ALLOCATOR) */ - JERRY_CONTEXT (jmem_heap_allocated_size) += (new_size - old_size); + const size_t required_size = new_size - old_size; +#if !ENABLED (JERRY_MEM_GC_BEFORE_EACH_ALLOC) + if (JERRY_CONTEXT (jmem_heap_allocated_size) + required_size >= JERRY_CONTEXT (jmem_heap_limit)) +#endif /* !ENABLED (JERRY_MEM_GC_BEFORE_EACH_ALLOC) */ + { + ecma_free_unused_memory (JMEM_PRESSURE_LOW); + } + + JERRY_CONTEXT (jmem_heap_allocated_size) += required_size; while (JERRY_CONTEXT (jmem_heap_allocated_size) >= JERRY_CONTEXT (jmem_heap_limit)) {