mirror of
https://github.com/openharmony/js_worker_module.git
synced 2026-07-19 11:22:56 -04:00
!63 sync debugger signal bugfix to release
Merge pull request !63 from Gymee/debugger_bugfix_release
This commit is contained in:
@@ -95,6 +95,10 @@ bool Worker::PrepareForWorkerInstance()
|
||||
HILOG_ERROR("worker:: CallWorkerAsyncWorkFunc error");
|
||||
}
|
||||
// 2. init worker environment
|
||||
#if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM)
|
||||
workerEngine->SetDebuggerPostTaskFunc(
|
||||
std::bind(&Worker::DebuggerOnPostTask, this, std::placeholders::_1));
|
||||
#endif
|
||||
if (!hostEngine->CallInitWorkerFunc(workerEngine)) {
|
||||
HILOG_ERROR("worker:: CallInitWorkerFunc error");
|
||||
return false;
|
||||
@@ -192,6 +196,10 @@ void Worker::ExecuteInThread(const void* data)
|
||||
// 2. add some preparation for the worker
|
||||
if (worker->PrepareForWorkerInstance()) {
|
||||
uv_async_init(loop, &worker->workerOnMessageSignal_, reinterpret_cast<uv_async_cb>(Worker::WorkerOnMessage));
|
||||
#if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM)
|
||||
uv_async_init(loop, &worker->debuggerOnPostTaskSignal_, reinterpret_cast<uv_async_cb>(
|
||||
Worker::HandleDebuggerTask));
|
||||
#endif
|
||||
worker->UpdateWorkerState(RUNNING);
|
||||
// in order to invoke worker send before subThread start
|
||||
uv_async_send(&worker->workerOnMessageSignal_);
|
||||
@@ -260,6 +268,31 @@ void Worker::HostOnError(const uv_async_t* req)
|
||||
worker->TerminateInner();
|
||||
}
|
||||
|
||||
#if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM)
|
||||
void Worker::HandleDebuggerTask(const uv_async_t* req)
|
||||
{
|
||||
Worker* worker = DereferenceHelp::DereferenceOf(&Worker::debuggerOnPostTaskSignal_, req);
|
||||
if (worker == nullptr) {
|
||||
HILOG_ERROR("worker::worker is null");
|
||||
return;
|
||||
}
|
||||
|
||||
worker->debuggerTask_();
|
||||
}
|
||||
|
||||
void Worker::DebuggerOnPostTask(std::function<void()>&& task)
|
||||
{
|
||||
if (IsTerminated()) {
|
||||
HILOG_ERROR("worker:: worker has been terminated.");
|
||||
return;
|
||||
}
|
||||
if (uv_is_active((uv_handle_t*)&debuggerOnPostTaskSignal_)) {
|
||||
debuggerTask_ = std::move(task);
|
||||
uv_async_send(&debuggerOnPostTaskSignal_);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void Worker::WorkerOnMessage(const uv_async_t* req)
|
||||
{
|
||||
Worker* worker = DereferenceHelp::DereferenceOf(&Worker::workerOnMessageSignal_, req);
|
||||
@@ -352,6 +385,9 @@ void Worker::TerminateWorker()
|
||||
{
|
||||
// when there is no active handle, worker loop will stop automatic.
|
||||
uv_close((uv_handle_t*)&workerOnMessageSignal_, nullptr);
|
||||
#if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM)
|
||||
uv_close(reinterpret_cast<uv_handle_t*>(&debuggerOnPostTaskSignal_), nullptr);
|
||||
#endif
|
||||
CloseWorkerCallback();
|
||||
uv_loop_t* loop = GetWorkerLoop();
|
||||
if (loop != nullptr) {
|
||||
|
||||
@@ -242,6 +242,11 @@ private:
|
||||
void ParentPortRemoveListenerInner(napi_env env, const char* type, napi_ref callback);
|
||||
void PreparePandafile();
|
||||
|
||||
#if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM)
|
||||
static void HandleDebuggerTask(const uv_async_t* req);
|
||||
void DebuggerOnPostTask(std::function<void()>&& task);
|
||||
#endif
|
||||
|
||||
napi_env GetHostEnv() const
|
||||
{
|
||||
return hostEnv_;
|
||||
@@ -263,6 +268,10 @@ private:
|
||||
uv_async_t workerOnMessageSignal_ {};
|
||||
uv_async_t hostOnMessageSignal_ {};
|
||||
uv_async_t hostOnErrorSignal_ {};
|
||||
#if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM)
|
||||
uv_async_t debuggerOnPostTaskSignal_ {};
|
||||
std::function<void()> debuggerTask_;
|
||||
#endif
|
||||
|
||||
std::atomic<RunnerState> runnerState_ {STARTING};
|
||||
std::atomic<HostState> hostState_ {ACTIVE};
|
||||
|
||||
Reference in New Issue
Block a user