Emscripten Fetch 接口的一个潜在内存泄漏问题
💡
原文中文,约3100字,阅读约需8分钟。
📝
内容提要
Emscripten编译的WASM程序存在内存泄漏问题,主要由于Fetch模块的缓存机制。未正确调用emscripten_fetch_close会导致内存未回收。解决方法是将fetch->id强制设置为非零值,以确保资源正确释放。
🎯
关键要点
- Emscripten编译的WASM程序存在内存泄漏问题,主要由于Fetch模块的缓存机制。
- 未正确调用emscripten_fetch_close会导致内存未回收。
- Fetch API可以将下载的内容缓存到IndexDB中,但此机制可能导致内存泄漏。
- 在onerror和onsuccess回调中需要调用emscripten_fetch_close来关闭fetch指针。
- emscripten_fetch_close函数会检查fetch的状态,若不符合条件则不会执行清理过程。
- fetch->id是fetch的唯一标识符,只有在发起XHR请求时才会被分配。
- 如果缓存存在,fetchXHR函数不会被调用,导致无法回收资源。
- 解决方法是强制设置fetch->id为非零值,以确保资源正确释放。
➡️