Skip to content

Commit 8fa637a

Browse files
watch: handled race conditions while relaying events from worker
1 parent 662287e commit 8fa637a

1 file changed

Lines changed: 19 additions & 12 deletions

File tree

lib/internal/worker.js

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -338,21 +338,28 @@ class Worker extends EventEmitter {
338338

339339
this[kPublicPort] = publicPortToParent;
340340
ArrayPrototypeForEach(['message', 'messageerror'], (event) => {
341-
this[kPublicPort].on(event, (message) => this.emit(event, message));
341+
this[kPublicPort].on(event, (message) => {
342+
// Extract watch messages first if needed and relay events from worker thread to watcher
343+
if (
344+
event === 'message' &&
345+
process.env.WATCH_REPORT_DEPENDENCIES &&
346+
process.send
347+
) {
348+
const { isMainThread } = internalBinding('worker');
349+
if (isMainThread) {
350+
if (ArrayIsArray(message?.['watch:require'])) {
351+
process.send({ 'watch:require': message['watch:require'] });
352+
}
353+
if (ArrayIsArray(message?.['watch:import'])) {
354+
process.send({ 'watch:import': message['watch:import'] });
355+
}
356+
}
357+
}
358+
this.emit(event, message);
359+
});
342360
});
343361
setupPortReferencing(this[kPublicPort], this, 'message');
344362

345-
// Relay events from worker thread to watcher
346-
if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) {
347-
this[kPublicPort].on('message', (message) => {
348-
if (ArrayIsArray(message?.['watch:require'])) {
349-
process.send({ 'watch:require': message['watch:require'] });
350-
}
351-
if (ArrayIsArray(message?.['watch:import'])) {
352-
process.send({ 'watch:import': message['watch:import'] });
353-
}
354-
});
355-
}
356363
this[kPort].postMessage({
357364
argv,
358365
type: messageTypes.LOAD_SCRIPT,

0 commit comments

Comments
 (0)