!64 [3.2 beta2] timer功能异常,调用clearTimer发生crash

Merge pull request !64 from wangzhaoyong/master
This commit is contained in:
openharmony_ci
2022-08-10 07:38:46 +00:00
committed by Gitee
4 changed files with 22 additions and 3 deletions
+2
View File
@@ -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
View File
@@ -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);
}
+2
View File
@@ -45,6 +45,8 @@ struct TimerCallbackInfo {
}
~TimerCallbackInfo();
void DeleteTimerCallbackInfo();
};
class Timer {
+1
View File
@@ -369,6 +369,7 @@ public:
uv_run(loop, UV_RUN_DEFAULT);
} else {
HILOG_ERROR("worker:: Worker loop is nullptr when start worker loop");
return;
}
}