Skip to content

Commit ad4c0bb

Browse files
committed
wake child thread when throw
1 parent 8b5436d commit ad4c0bb

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

packages/emnapi/src/core/async.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ function spawnThread (startArg: number, threadId?: Int32Array): number {
7373
if (ENVIRONMENT_IS_PTHREAD) {
7474
const threadIdBuffer = new SharedArrayBuffer(4)
7575
const id = new Int32Array(threadIdBuffer)
76-
Atomics.store(id, 0, -1)
7776
const postMessage = napiModule.postMessage!
7877
postMessage({
7978
__emnapi__: {
@@ -84,15 +83,27 @@ function spawnThread (startArg: number, threadId?: Int32Array): number {
8483
}
8584
}
8685
})
87-
Atomics.wait(id, 0, -1)
86+
Atomics.wait(id, 0, 0)
8887
const tid = Atomics.load(id, 0)
8988
return tid
9089
}
9190

92-
if (typeof onCreateWorker !== 'function') {
93-
throw new TypeError('createNapiModule `options.onCreateWorker` is not provided')
91+
let worker: any
92+
try {
93+
if (typeof onCreateWorker !== 'function') {
94+
throw new TypeError('createNapiModule `options.onCreateWorker` is not provided')
95+
}
96+
worker = onCreateWorker()
97+
} catch (err) {
98+
const EAGAIN = 6
99+
const ret = -EAGAIN
100+
if (threadId) {
101+
Atomics.store(threadId, 0, ret)
102+
Atomics.notify(threadId, 0)
103+
}
104+
err(err.message)
105+
return ret
94106
}
95-
const worker = onCreateWorker()
96107

97108
worker.onmessage = function (e: any) {
98109
if (e.data.__emnapi__) {

0 commit comments

Comments
 (0)