mirror of
https://github.com/openharmony/js_worker_module.git
synced 2026-07-19 19:23:34 -04:00
!64 [3.2 beta2] timer功能异常,调用clearTimer发生crash
Merge pull request !64 from wangzhaoyong/master
This commit is contained in:
@@ -43,6 +43,7 @@ public:
|
||||
delete[] value;
|
||||
} else {
|
||||
delete value;
|
||||
value = nullptr;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -60,6 +61,7 @@ public:
|
||||
delete[] data_;
|
||||
} else {
|
||||
delete data_;
|
||||
data_ = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+17
-3
@@ -31,7 +31,21 @@ TimerCallbackInfo::~TimerCallbackInfo()
|
||||
Helper::CloseHelp::DeletePointer(argv_, true);
|
||||
|
||||
uv_timer_stop(&timeReq_);
|
||||
uv_close(reinterpret_cast<uv_handle_t*>(&timeReq_), nullptr);
|
||||
uv_close(reinterpret_cast<uv_handle_t*>(&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);
|
||||
}
|
||||
|
||||
@@ -45,6 +45,8 @@ struct TimerCallbackInfo {
|
||||
}
|
||||
|
||||
~TimerCallbackInfo();
|
||||
|
||||
void DeleteTimerCallbackInfo();
|
||||
};
|
||||
|
||||
class Timer {
|
||||
|
||||
@@ -369,6 +369,7 @@ public:
|
||||
uv_run(loop, UV_RUN_DEFAULT);
|
||||
} else {
|
||||
HILOG_ERROR("worker:: Worker loop is nullptr when start worker loop");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user