Commit 01c6169
src: napi-inl: Fix a memory leak bug in
In `AsyncProgressWorkerBase<DataType>::NonBlockingCall` if the call to
`_tsfn.NonBlockingCall()` doesn't return a `napi_ok`, the ThreadSafeData
object is not deleted by `OnAsyncWorkProgress()`, resulting a memory
leak bug.
Report from ASAN (Address Sanitizer):
```
Direct leak of 2706523824 byte(s) in 169157739 object(s) allocated:
# 0 0x7fc83c2dd76d in operator new(unsigned long)
# 1 0x7fc83b639fc2 in Napi::AsyncProgressWorkerBase<void>::NonBlockingCall(void*)
# 2 0x7fc83b639fc2 in Napi::AsyncProgressWorker<unsigned char>::SendProgress_()
# 3 0x7fc83b635cd0 in Napi::AsyncProgressWorker<unsigned char>::ExecutionProgress::Send()
# 4 0x7fc83b635cd0 in WaitCQEWorker::Execute()
# 5 0x7fc83b636545 in Napi::AsyncProgressWorker<unsigned char>::Execute()
# 6 0xb8df59 in node::ThreadPoolWork::ScheduleWork()::'lambda'(uv_work_s*)::_FUN(uv_work_s*)
# 7 0x1768fb3 in worker /home/iojs/build/ws/out/../deps/uv/src/threadpool.c:122:5
# 8 0x7fc83ba94b42 in start_thread nptl/./nptl/pthread_create.c:442:8
```
Fix this by deleting the tsd variable if `_tsfn.NonBlockingCall()`
doesn't return a `napi_ok`.
Signed-off-by: Ammar Faizi <[email protected]>
PR-URL: #1264
Reviewed-By: Michael Dawson <[email protected]
Reviewed-By: Chengzhong Wu <[email protected]>
Reviewed-By: Kevin Eady <[email protected]>AsyncProgressWorkerBase
1 parent 55bd08e commit 01c6169
1 file changed
+5
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5889 | 5889 | | |
5890 | 5890 | | |
5891 | 5891 | | |
5892 | | - | |
| 5892 | + | |
| 5893 | + | |
| 5894 | + | |
| 5895 | + | |
| 5896 | + | |
5893 | 5897 | | |
5894 | 5898 | | |
5895 | 5899 | | |
| |||
0 commit comments