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

Don't throw exception while module_malloc failed (#860)

Don't throw exception when module_malloc memory failed:
- Exception will terminate the wasm app, it's not necessary since app can
  check the result of dynamic allocation and do some cleanup or fallback
  operation on failure instead of 'crash' directly.
- In acquire_wait_info, call hasn_map_find only when the address isn't NULL,
  or there are many senseless error logs
Huang Qi 4 лет назад
Родитель
Сommit
c8fe1004aa

+ 1 - 1
core/iwasm/aot/aot_runtime.c

@@ -1774,7 +1774,7 @@ aot_module_malloc(AOTModuleInstance *module_inst, uint32 size,
             aot_set_exception(module_inst, "app heap corrupted");
             aot_set_exception(module_inst, "app heap corrupted");
         }
         }
         else {
         else {
-            aot_set_exception(module_inst, "out of memory");
+            LOG_WARNING("warning: allocate %u bytes memory failed", size);
         }
         }
         return 0;
         return 0;
     }
     }

+ 2 - 1
core/iwasm/common/wasm_shared_memory.c

@@ -224,7 +224,8 @@ acquire_wait_info(void *address, bool create)
     AtomicWaitInfo *wait_info = NULL;
     AtomicWaitInfo *wait_info = NULL;
     bh_list_status ret;
     bh_list_status ret;
 
 
-    wait_info = (AtomicWaitInfo *)bh_hash_map_find(wait_map, address);
+    if (address)
+        wait_info = (AtomicWaitInfo *)bh_hash_map_find(wait_map, address);
 
 
     if (!create)
     if (!create)
         return wait_info;
         return wait_info;

+ 1 - 1
core/iwasm/interpreter/wasm_runtime.c

@@ -1830,7 +1830,7 @@ wasm_module_malloc(WASMModuleInstance *module_inst, uint32 size,
             wasm_set_exception(module_inst, "app heap corrupted");
             wasm_set_exception(module_inst, "app heap corrupted");
         }
         }
         else {
         else {
-            wasm_set_exception(module_inst, "out of memory");
+            LOG_WARNING("warning: allocate %u bytes memory failed", size);
         }
         }
         return 0;
         return 0;
     }
     }