Просмотр исходного кода

update luat_heap_alloc,处理收缩内存时,bget失败的情况下返回原来缓存区,防止出现因堆栈收缩失败引起的死循环

Clong 5 лет назад
Родитель
Сommit
7e5705e48f
1 измененных файлов с 12 добавлено и 1 удалено
  1. 12 1
      luat/modules/luat_malloc_weak.c

+ 12 - 1
luat/modules/luat_malloc_weak.c

@@ -37,7 +37,18 @@ LUAT_WEAK void* luat_heap_calloc(size_t count, size_t _size) {
 // ---------- 管理 LuaVM所使用的内存----------------
 LUAT_WEAK void* luat_heap_alloc(void *ud, void *ptr, size_t osize, size_t nsize) {
     if (nsize)
-        return bgetr(ptr, nsize);
+    {
+    	void* ptmp = bgetr(ptr, nsize);
+    	if(ptmp == NULL && osize >= nsize)
+    	{
+    		if( osize != nsize )
+    		{
+    			memset((char*)ptr + nsize, 0,(osize - nsize));
+    		}
+    		return ptr;
+    	}
+        return ptmp;
+    }
     brel(ptr);
     return NULL;
 }