Dylan Conway
94d609cd69
fix(worker_threads): use MessagePort for parentPort instead of dispatching to self
...
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
2026-01-19 21:22:48 -08:00
robobun
b2351bbb4e
Add Symbol.asyncDispose to Worker in worker_threads ( #22064 )
...
## Summary
- Implement `Symbol.asyncDispose` for the `Worker` class in
`worker_threads` module
- Enables automatic resource cleanup with `await using` syntax
- Calls `await this.terminate()` to properly shut down workers when they
go out of scope
## Implementation Details
The implementation adds a simple async method to the Worker class:
```typescript
async [Symbol.asyncDispose]() {
await this.terminate();
}
```
This allows workers to be used with the new `await using` syntax for
automatic cleanup:
```javascript
{
await using worker = new Worker('./worker.js');
// worker automatically terminates when leaving this scope
}
```
## Test Plan
- [x] Added comprehensive tests for `Symbol.asyncDispose` functionality
- [x] Tests verify the method exists and returns undefined
- [x] Tests verify `await using` syntax works correctly for automatic
worker cleanup
- [x] All new tests pass
- [x] Existing worker_threads functionality remains intact
🤖 Generated with [Claude Code](https://claude.ai/code )
---------
Co-authored-by: Claude Bot <claude-bot@bun.sh >
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-22 19:59:15 -07:00
Jarred Sumner
2e02d9de28
Use ReadableStream.prototype.* in tests instead of new Response(...).* ( #20937 )
...
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com >
Co-authored-by: Alistair Smith <hi@alistair.sh >
Co-authored-by: Claude Bot <claude-bot@bun.sh >
Co-authored-by: Claude <noreply@anthropic.com >
2025-07-14 00:47:53 -07:00
Ali
95346bd919
fixed SharedArrayBuffer crashing on transfer ( #20130 )
2025-06-02 23:05:52 -07:00
190n
9dd799d2e6
Implement Worker.getHeapSnapshot ( #19706 )
...
Co-authored-by: 190n <7763597+190n@users.noreply.github.com >
2025-05-23 16:50:13 -07:00
190n
a182c313e2
pass test-worker-nested-uncaught.js ( #19509 )
2025-05-12 14:10:18 -07:00
190n
b5f31a6ee2
node:worker_threads: improve error messages, support environmentData, emit worker event ( #18768 )
...
Co-authored-by: 190n <7763597+190n@users.noreply.github.com >
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2025-05-08 19:27:46 -07:00
190n
eee5d4fb4a
node:worker_threads low-hanging fruit ( #18758 )
...
Co-authored-by: 190n <7763597+190n@users.noreply.github.com >
Co-authored-by: Ashcon Partovi <ashcon@partovi.net >
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com >
Co-authored-by: Don Isaac <donald.isaac@gmail.com >
Co-authored-by: chloe caruso <git@paperclover.net >
2025-04-08 05:29:53 -07:00
190n
c1218b250d
Bump WebKit and re-enable IPInt ( #16227 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
Co-authored-by: Kai Tamkun <kai@tamkun.io >
2025-01-15 04:06:52 -08:00
Jarred Sumner
1ae855223c
Bump WebKit ( #16068 )
2024-12-31 14:48:54 -08:00
Meghan Denny
6f60523e6c
" -> ' (#14776 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2024-10-23 19:21:36 -07:00
Jarred Sumner
3e8a50ba57
workerData should default to null instead of undefined ( #13835 )
...
Co-authored-by: Jarred-Sumner <Jarred-Sumner@users.noreply.github.com >
2024-09-09 16:48:12 -07:00
Jarred Sumner
cd6785771e
run prettier and add back format action ( #13722 )
2024-09-03 21:32:52 -07:00
Meghan Denny
ff0f9d5f4d
node:worker_threads: fix assertion when require is used with 'eval:true' ( #13108 )
2024-08-07 02:30:40 -07:00
Ciro Spaciari
1c648063fa
fix(tls/socket/fetch) shutdown fix + ref counted context ( #12925 )
...
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com >
2024-07-30 22:41:54 -07:00
Jarred Sumner
6a756bf979
Implement blob: URLs in fetch, import, and Worker ( #11537 )
...
Co-authored-by: Jarred-Sumner <Jarred-Sumner@users.noreply.github.com >
Co-authored-by: dave caruso <me@paperdave.net >
2024-06-05 18:49:03 -07:00
Jarred Sumner
2580d199a4
fix some worker-related stability issues ( #11494 )
2024-06-04 23:29:21 -07:00
dave caruso
e792bbdf5f
fix: overriding self.postMessage should not impact worker_threads.parentPort ( #10496 )
...
* fix a bug in worker
* remove old
2024-04-24 22:14:37 -07:00
Meghan Denny
3a7df3f6c7
windows: add more passing test ( #8615 )
2024-02-01 13:45:47 -08:00
dave caruso
072f2f15ea
ci: run windows tests and also run them concurrently ( #7758 )
2024-01-12 17:02:20 -08:00
Jérôme Benoit
6a5995e27d
test(worker): refactor worker tests ( #6732 )
...
* test(worker): refactor worker tests
+ constify variables
+ typing
+ untangle web worker from worker_threads tests
+ cleanup variables namespace
no functional changes on tests
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: move worker_threads related code to node/worker_threads
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: move worker tests into workers directory
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* refactor: report upstream changes
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* refactor: report upstream change
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* fix: address review comments
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* chore: fix submodule
---------
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
Co-authored-by: dave caruso <me@paperdave.net >
2023-12-06 17:06:11 -08:00
Dylan Conway
042a6cdbce
Update worker_threads.test.ts
2023-10-24 17:07:48 -07:00
Jérôme Benoit
85a0d71c52
fix(worker_threads): off by one on threadId ( #6671 )
...
* fix(worker_threads): off by one on threadId
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: refine worker_threads threadId consistency test
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: improve worker_threads tests
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: fix worker_threads threadId consistency test
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: simplify worker_threads threadId consistency test
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: refine worker_threads threadId consistency test
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org >
* refactor: cleanup import on worker_threads tests
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: switch worker_threads worker to TS
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: revert wrong refactoring
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: format
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: port worker_threads worker to ESM
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: cleanup worker_threads test
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: improve worker_threads coverage
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org >
---------
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org >
2023-10-24 17:05:22 -07:00
Jérôme Benoit
d9c0273421
fix(node:worker_threads): ensure threadId property is exposed on worker_threads instance ( #6521 )
...
* fix: ensure threadId property is exposed on worker_threads instance
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* fix: rename lazy worker_threads module properties
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* fix: add getter for threadId
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: improve worker_threads UTs
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: fix lazy loading
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: fix worker_threads test
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org >
* fix: return the worker threadId
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
* test: refine worker_threads expectation on threadId
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org >
---------
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com >
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org >
2023-10-16 15:19:38 -07:00
dave caruso
5497accbdb
Add env option for node:worker_threads ( #4052 )
...
* almost works
* env stuff
* test fixes
* wtfmove
* ok
* ok
* ref by default
* it now does the ref stuff by default
* cool
2023-08-07 23:58:38 -07:00
Jarred Sumner
207c7eb509
Implement node:worker_threads ( #3923 )
...
* Start to implement `worker_threads`
* more
* more!!
* more
* Update bundle_v2.zig
* delete outdated tests
* `receiveMessageOnPort`
* props test and export default
* fix merge
* not implemented tests
* individual imports
* `receiveMessageOnPort` tests
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com >
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com >
2023-08-02 18:12:12 -07:00