MCPcopy Create free account
hub / github.com/nodejs/node-addon-api / FailCancelWorker

Class FailCancelWorker

test/async_worker.cc:221–271  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

219};
220
221class FailCancelWorker : public AsyncWorker {
222 private:
223 bool taskIsRunning = false;
224 std::mutex mu;
225 std::condition_variable taskStartingCv;
226 void NotifyJSThreadTaskHasStarted() {
227 {
228 std::lock_guard<std::mutex> lk(mu);
229 taskIsRunning = true;
230 taskStartingCv.notify_one();
231 }
232 }
233
234 public:
235 FailCancelWorker(Function& cb) : AsyncWorker(cb) {}
236 ~FailCancelWorker() {}
237
238 void WaitForWorkerTaskToStart() {
239 std::unique_lock<std::mutex> lk(mu);
240 taskStartingCv.wait(lk, [this] { return taskIsRunning; });
241 taskIsRunning = false;
242 }
243
244 static void DoCancel(const CallbackInfo& info) {
245 Function cb = info[0].As<Function>();
246
247 FailCancelWorker* cancelWorker = new FailCancelWorker(cb);
248 cancelWorker->Queue();
249 cancelWorker->WaitForWorkerTaskToStart();
250
251#ifdef NAPI_CPP_EXCEPTIONS
252 try {
253 cancelWorker->Cancel();
254 } catch (Napi::Error&) {
255 Napi::Error::New(info.Env(), "Unable to cancel async worker tasks")
256 .ThrowAsJavaScriptException();
257 }
258#else
259 cancelWorker->Cancel();
260#endif
261 }
262
263 void Execute() override {
264 NotifyJSThreadTaskHasStarted();
265 std::this_thread::sleep_for(std::chrono::seconds(1));
266 }
267
268 void OnOK() override {}
269
270 void OnError(const Error&) override {}
271};
272
273class CancelWorker : public AsyncWorker {
274 public:

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected