Skip to content

Commit 6641eed

Browse files
committed
node-api: release lock before calling user callback
1 parent 073cc51 commit 6641eed

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/node_api.cc

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -307,17 +307,21 @@ class ThreadSafeFunction {
307307
}
308308

309309
void EmptyQueueAndMaybeDelete() {
310+
std::queue<void*> drain_queue;
311+
{
312+
node::Mutex::ScopedLock lock(this->mutex);
313+
queue.swap(drain_queue);
314+
}
315+
for (; !drain_queue.empty(); drain_queue.pop()) {
316+
call_js_cb(nullptr, nullptr, context, drain_queue.front());
317+
}
310318
{
311319
node::Mutex::ScopedLock lock(this->mutex);
312-
for (; !queue.empty(); queue.pop()) {
313-
call_js_cb(nullptr, nullptr, context, queue.front());
314-
}
315320
if (thread_count > 0) {
316321
// At this point this TSFN is effectively done, but we need to keep
317322
// it alive for other threads that still have pointers to it until
318323
// they release them.
319324
// But we already release all the resources that we can at this point
320-
queue = {};
321325
ReleaseResources();
322326
return;
323327
}

0 commit comments

Comments
 (0)