mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 02:48:50 +00:00
Node.js worker_threads delivers messages only to parentPort, not to
self.onmessage. Libraries like fflate set both handlers expecting only
parentPort.on('message') to fire.
Previously, Bun dispatched messages to both self.onmessage AND
parentPort event listeners, causing handlers to run twice.
This fix creates a real MessagePort pair for Node workers:
- Parent keeps port1 (m_parentPort) for worker.postMessage()
- Worker gets port2 as parentPort via entangle()
- WorkerMessageForwarder forwards port1 messages to Worker object
This matches Node.js architecture where worker.postMessage() goes
through a MessagePort channel, not the global scope.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Claude-Generated-By: Claude Code (cli/claude-opus-4-5=100%)
Claude-Steers: 0
Claude-Permission-Prompts: 4
Claude-Escapes: 0