diff --git a/helper/object_helper.h b/helper/object_helper.h index f754863bf4a6414104c47718d9363c5a40fb890f..35e3da15b994d4a355177ab866ce4576bf9cd7db 100644 --- a/helper/object_helper.h +++ b/helper/object_helper.h @@ -43,6 +43,7 @@ public: delete[] value; } else { delete value; + value = nullptr; } } }; @@ -60,6 +61,7 @@ public: delete[] data_; } else { delete data_; + data_ = nullptr; } } diff --git a/plugin/timer.cpp b/plugin/timer.cpp index 4cd59adbd8bed6f97299008c00d56ead877b1656..4ad23371c3a8fe249366a85bf4a78e46379fc6d1 100644 --- a/plugin/timer.cpp +++ b/plugin/timer.cpp @@ -31,7 +31,21 @@ TimerCallbackInfo::~TimerCallbackInfo() Helper::CloseHelp::DeletePointer(argv_, true); uv_timer_stop(&timeReq_); - uv_close(reinterpret_cast(&timeReq_), nullptr); + uv_close(reinterpret_cast(&timeReq_), [](uv_handle_t* handle) { + if (handle != NULL) { + delete (uv_timer_t*)handle; + } + }); +} + +void TimerCallbackInfo::DeleteTimerCallbackInfo() +{ + Helper::NapiHelper::DeleteReference(env_, callback_); + for (size_t idx = 0; idx < argc_; idx++) { + Helper::NapiHelper::DeleteReference(env_, argv_[idx]); + } + Helper::CloseHelp::DeletePointer(argv_, true); + uv_timer_stop(&timeReq_); } bool Timer::RegisterTime(napi_env env) @@ -86,7 +100,7 @@ napi_value Timer::ClearTimer(napi_env env, napi_callback_info cbinfo) } TimerCallbackInfo* callbackInfo = iter->second; timerTable.erase(tId); - Helper::CloseHelp::DeletePointer(callbackInfo, false); + callbackInfo->DeleteTimerCallbackInfo(); return Helper::NapiHelper::GetUndefinedValue(env); } @@ -112,7 +126,7 @@ void Timer::TimerCallback(uv_timer_t* handle) } if (!callbackInfo->repeat_) { timerTable.erase(callbackInfo->tId_); - Helper::CloseHelp::DeletePointer(callbackInfo, false); + callbackInfo->DeleteTimerCallbackInfo(); } else { uv_timer_again(handle); } diff --git a/plugin/timer.h b/plugin/timer.h index 08a2cb56665bdeed83d68e0a42c51e7dadb0ff12..a1087cb8ef9c99ceead6f053ecf4015fbe1fd6eb 100644 --- a/plugin/timer.h +++ b/plugin/timer.h @@ -45,6 +45,8 @@ struct TimerCallbackInfo { } ~TimerCallbackInfo(); + + void DeleteTimerCallbackInfo(); }; class Timer { diff --git a/worker/worker.h b/worker/worker.h index df288468ed53ec28cbc3f59224860395447e025c..41715ce03fbea2220a884b324eb344431262bf10 100644 --- a/worker/worker.h +++ b/worker/worker.h @@ -369,6 +369,7 @@ public: uv_run(loop, UV_RUN_DEFAULT); } else { HILOG_ERROR("worker:: Worker loop is nullptr when start worker loop"); + return; } }