Commit Graph

159 Commits

Author SHA1 Message Date
Ciro Spaciari
7798e6638b Implement NODE_USE_SYSTEM_CA with --use-system-ca CLI flag (#22441)
### What does this PR do?
Resume work on https://github.com/oven-sh/bun/pull/21898
### How did you verify your code works?
Manually tested on MacOS, Windows 11 and Ubuntu 25.04. CI changes are
needed for the tests

---------

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>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2025-09-24 21:55:57 -07:00
Jarred Sumner
7d5f5ad772 Fix strange build error 2025-09-12 01:08:46 -07:00
robobun
a37b858993 Add debug-only network traffic logging via BUN_RECV and BUN_SEND env vars (#21890)
Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Meghan Denny <meghan@bun.sh>
2025-09-10 20:52:18 -07:00
Meghan Denny
5b7fd9ed0e node:_http_server: implement Server.prototype.closeIdleConnections (#22234) 2025-09-04 15:18:31 -07:00
Jarred Sumner
7b31393d44 Don't run the "Date" header timer every second all the time (#21850)
### What does this PR do?

Only reschedule the Date header while there are in-flight incoming HTTP
requests.

Update the Date header if, at the time we reschedule it, it is now
stale.

Goal: don't wake up Bun's process on every second when we're idly doing
nothing.

| Metric | this branch | main |
|--------|--------------------------|-------------------|
| **task-clock** | **35.24 msec** 🟢 | **102.79 msec** |
| **context-switches** | 619 🟢 | 1,699 |
| **cpu-migrations** | 11 🟢| 35 |
| **page-faults** | 2,173 | 2,174 |
| **cpu_atom/instructions** | **109,904,685 (1.76 insn/cycle)** 🟢 |
**67,880,002 (0.55 insn/cycle)** |
| **cpu_core/instructions** | **87,183,124 (1.07 insn/cycle)** 🟢 |
**32,939,500 (0.44 insn/cycle)** |
| **cpu_atom/cycles** | 62,527,125 (1.774 GHz) 🔻 | 122,448,620 (1.191
GHz) |
| **cpu_core/cycles** | 81,651,366 (2.317 GHz) 🟢 | 75,584,111 (0.735
GHz) |
| **cpu_atom/branches** | 9,632,460 (273.338 M/sec) 🔻 | 12,119,616
(117.909 M/sec) |
| **cpu_core/branches** | 17,417,756 (494.259 M/sec) 🟢 | 6,901,859
(67.147 M/sec) |
| **cpu_atom/branch-misses** | 192,013 (1.99%) 🟢 | 1,735,446 (14.32%) |
| **cpu_core/branch-misses** | 473,567 (2.72%) 🟢 | 499,907 (7.24%) |
| **TopdownL1 (cpu_core)** | 31.4% backend_bound<br>11.7%
bad_speculation<br>36.0% frontend_bound 🔻<br>20.9% retiring<br>34.1%
bad_speculation<br>41.9% retiring<br>0.0% backend_bound<br>24.0%
frontend_bound 🔻 | 21.3% backend_bound<br>9.6% bad_speculation<br>56.2%
frontend_bound<br>12.9% retiring<br>-20.0% bad_speculation<br>55.2%
retiring<br>26.2% backend_bound<br>38.6% frontend_bound |
| **time elapsed** | 1000.0219 s | 1000.0107 s |
| **user time** | — | 0.042667 s |
| **sys time** | — | 0.060309 s |

### How did you verify your code works?

Added a test

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-14 15:39:09 -07:00
Jarred Sumner
964d4dac2c Rewrite AbortSignal.timeout (#21695)
### What does this PR do?

On Linux, AbortSignal.timeout created a file descriptor for each timeout
and did not keep the event loop alive when a timer was active. This is
fixed.

### How did you verify your code works?

Fewer flaky tests

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Claude <claude@anthropic.ai>
2025-08-08 23:07:19 -07:00
Ciro Spaciari
ed6f099e5e fix(tls) fix ciphers (#21545)
### What does this PR do?
Uses same ciphers than node.js for compatibility and do the same error
checking on empty ciphers
Fixes https://github.com/oven-sh/bun/issues/9425
Fixes https://github.com/oven-sh/bun/issues/21518
Fixes https://github.com/oven-sh/bun/issues/19859
Fixes https://github.com/oven-sh/bun/issues/18980

You can see more about redis ciphers here
https://redis.io/docs/latest/operate/rs/security/encryption/tls/ciphers/
this should fix redis related ciphers issues
### How did you verify your code works?
Tests

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2025-08-04 19:42:40 -07:00
Jarred Sumner
b6d3768038 Use stopIfNecessary() instead of heap.{acquireAccess,releaseAccess} (#21598)
### What does this PR do?

dropAllLocks causes Thread::yield several times which means more system
calls which means more thread switches which means slower

### How did you verify your code works?
2025-08-04 00:45:33 -07:00
Jarred Sumner
1ac2391b20 Reduce idle CPU usage in long-running processes (#21579)
### What does this PR do?

Releasing heap access causes all the heap helper threads to wake up and
lock and then unlock futexes, but it's important to do that to ensure
finalizers run quickly.

That means releasing heap access is a balance between:
 1. CPU usage
 2. Memory usage

Not releasing heap access causes benchmarks like
https://github.com/oven-sh/bun/pull/14885 to regress due to finalizers
not being called quickly enough.

Releasing heap access too often causes high idle CPU usage.

 For the following code:
 ```
 setTimeout(() => {}, 10 * 1000)
 ```

command time -v when with defaultRemainingRunsUntilSkipReleaseAccess =
0:
>
>   Involuntary context switches: 605
>

command time -v when with defaultRemainingRunsUntilSkipReleaseAccess =
5:
>
>   Involuntary context switches: 350
>

command time -v when with defaultRemainingRunsUntilSkipReleaseAccess =
10:
>
>  Involuntary context switches: 241
>

 Also comapre the #14885 benchmark with different values.

 The idea here is if you entered JS "recently", running any
 finalizers that might've been waiting to be run is a good idea.
 But if you haven't, like if the process is just waiting on I/O
 then don't bother.

### How did you verify your code works?
2025-08-03 18:14:40 -07:00
Ciro Spaciari
a729a046bd update(roots_certs) update root certificates to NSS 3.114 (#21557)
### What does this PR do?
This is the certdata.txt[0] from NSS 3.114, released on 2025-07-22.

This is the version of NSS that will ship in Firefox 141.0 on
2025-07-22.

[0]
https://hg.mozilla.org/projects/nss/raw-file/NSS_3_114_RTM/lib/ckfw/builtins/certdata.txt
9e39b6d8-c531-4737-af1f-9c29fb93917b

### How did you verify your code works?
Compiles
2025-08-01 21:01:55 -07:00
robobun
9bb4a6af19 Optimize uSockets sweep timer to only run when connections exist (#21456)
## Summary

This PR optimizes the uSockets sweep timer to only run when there are
active connections that need timeout checking, rather than running
continuously even when no connections exist.

**Problem**: The sweep timer was running every 4 seconds
(LIBUS_TIMEOUT_GRANULARITY) regardless of whether there were any active
connections, causing unnecessary CPU usage when Bun applications are
idle.

**Solution**: Implement reference counting for active sockets so the
timer is only enabled when needed.

## Changes

- **Add sweep_timer_count field** to both C and Zig loop data structures
- **Implement helper functions** `us_internal_enable_sweep_timer()` and
`us_internal_disable_sweep_timer()`
- **Timer lifecycle management**:
  - Timer starts disabled when loop is initialized
  - Timer enables when first socket is linked (count 0→1)
  - Timer disables when last socket is unlinked (count 1→0)
- **Socket coverage**: Applied to both regular sockets and connecting
sockets that need timeout sweeping
- **Listen socket exclusion**: Listen sockets don't increment the
counter as they don't need timeout checking

## Files Modified

- `packages/bun-usockets/src/internal/loop_data.h` - Added
sweep_timer_count field
- `src/deps/uws/InternalLoopData.zig` - Updated Zig struct to match C
struct
- `packages/bun-usockets/src/loop.c` - Helper functions and
initialization
- `packages/bun-usockets/src/internal/internal.h` - Function
declarations
- `packages/bun-usockets/src/context.c` - Socket link/unlink
modifications

## Test Results

Verified the optimization works correctly:

1. ** No timer during idle**: 5-second idle test showed no sweep timer
activity
2. ** Timer activates with connections**: Timer enables when server
starts listening
3. ** Timer runs periodically**: Sweep timer callbacks occur every ~4
seconds when connections are active
4. ** Timer deactivates**: Timer disables when connections are closed

## Performance Impact

This change significantly reduces CPU usage for idle Bun applications
with no active HTTP connections by eliminating unnecessary timer
callbacks. The optimization maintains all existing timeout functionality
while only running the sweep when actually needed.

## Test plan

- [x] Verify no timer activity during idle periods
- [x] Verify timer enables when connections are created
- [x] Verify timer runs at expected intervals when active
- [x] Verify timer disables when connections are closed
- [x] Test with HTTP server scenarios
- [ ] Run existing HTTP server test suite to ensure no regressions

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
2025-08-01 21:01:30 -07:00
Ciro Spaciari
964f2a8941 fix(fetch/s3) Handle backpressure when upload large bodies (#20481)
Co-authored-by: cirospaciari <6379399+cirospaciari@users.noreply.github.com>
2025-06-27 20:52:46 -07:00
Ciro Spaciari
c15190990c fix(sockets) some fixes and improvements (#20652) 2025-06-26 15:57:06 -07:00
Meghan Denny
139f2b23a2 chore: trim trailing space in uws (#20388) 2025-06-15 08:59:12 -07:00
pfg
e0924ef226 Implement require('tls').getCACertificates() (#20364)
Co-authored-by: pfgithub <6010774+pfgithub@users.noreply.github.com>
2025-06-13 17:30:04 -07:00
Jarred Sumner
27abb51561 Add fallback for ADDRCONFIG like Chrome's, avoid glibc UDP port 0 hangs (#19753)
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2025-06-05 20:20:00 -07:00
Meghan Denny
809992229f node:net rework (#18962)
Co-authored-by: nektro <5464072+nektro@users.noreply.github.com>
2025-05-28 17:04:37 -07:00
Jarred Sumner
3f360b0682 chore: format packages/scripts folder (#19611)
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2025-05-12 17:12:17 -07:00
pfg
00a3cbd977 more child-process (#18688)
Co-authored-by: pfgithub <6010774+pfgithub@users.noreply.github.com>
2025-05-06 22:12:24 -07:00
Ashcon Partovi
e2ed4f33a9 Remove unused files in bun-uws and bun-usockets (#19435) 2025-05-02 10:50:39 -07:00
Jarred Sumner
d8a69d6823 Enable ASAN with linux-x64-asan in CI 2025-05-02 10:44:09 -07:00
Ciro Spaciari
59b2a60790 compat(node:http) more passing (#19236)
Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com>
Co-authored-by: 190n <ben@bun.sh>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2025-04-24 19:26:55 -07:00
Jarred Sumner
a6a0fc3885 Clean up some usockets initializers (#18994) 2025-04-13 10:26:32 -07:00
Ciro Spaciari
a2efbd4ca2 fix(node:http) resume when reading and avoid unnecessary pause/resumes calls (#18804) 2025-04-07 17:30:16 -07:00
Meghan Denny
04a432f54f js: flesh out some of the props exposed on Bun.connect Socket (#18761) 2025-04-03 16:36:56 -07:00
Ciro Spaciari
7021c42cf2 fix(node:http) fix post regression (#18599)
Co-authored-by: cirospaciari <6379399+cirospaciari@users.noreply.github.com>
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Co-authored-by: Jarred-Sumner <709451+Jarred-Sumner@users.noreply.github.com>
2025-03-29 01:50:26 -07:00
Kai Tamkun
ee8a839500 Fix node:http UAF (#18485)
Co-authored-by: Dylan Conway <dylan.conway567@gmail.com>
Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com>
2025-03-25 23:31:04 -07:00
Kai Tamkun
60acfb17f0 node:http compatibility (options.lookup) (#18395)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2025-03-24 23:49:02 -07:00
Kai Tamkun
f30ca39242 More node:http compatibility (#18339)
Co-authored-by: Ciro Spaciari <ciro.spaciari@gmail.com>
2025-03-20 19:16:35 -07:00
Don Isaac
fa9bb75ad3 fix(uws): make Socket bindings safer (#18286)
Co-authored-by: DonIsaac <22823424+DonIsaac@users.noreply.github.com>
Co-authored-by: chloe caruso <git@paperclover.net>
2025-03-18 19:38:15 -07:00
Ciro Spaciari
45df1dbba0 fix(usockets) only add socket and context to the free list after socket on_close callback returns (#18144) 2025-03-13 12:45:53 -07:00
Kai Tamkun
4a0e982bb2 node:http improvements (#17093)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Co-authored-by: Pham Minh Triet <92496972+Nanome203@users.noreply.github.com>
Co-authored-by: snwy <snwy@snwy.me>
Co-authored-by: Ciro Spaciari <ciro.spaciari@gmail.com>
Co-authored-by: cirospaciari <cirospaciari@users.noreply.github.com>
Co-authored-by: Ben Grant <ben@bun.sh>
2025-03-10 20:19:29 -07:00
Ciro Spaciari
2a74f0d8f4 update(crypto) update root certificates to NSS 3.108 (#17950) 2025-03-06 14:40:36 -08:00
Kai Tamkun
bda1ad192d Fix EINVAL when setting IPv6 multicast membership (#17478) 2025-02-21 18:34:40 -08:00
Ciro Spaciari
8f888be7d5 fix(tls) ECONNRESET behavior (#17505) 2025-02-21 18:33:42 -08:00
Shlomo
506ea28b36 feat: load full certificate bundles from NODE_EXTRA_CA_CERTS (#16782) 2025-02-12 11:42:31 -08:00
Jarred Sumner
2770ecad5c Fixes #16995 (#17101) 2025-02-05 22:35:53 -08:00
Kai Tamkun
d63fe71a6d Fix node:dgram addMembership/dropMembership segfault (#17049) 2025-02-04 15:22:44 -08:00
Jarred Sumner
c1708ea6ab Try bringing release/acquire heap access back (#16865)
Co-authored-by: Ben Grant <ben@bun.sh>
2025-01-31 16:13:03 -08:00
Kai Tamkun
b3e75cee8b dgram: reuseAddr/reusePort fixes (#16677) 2025-01-24 18:51:50 -08:00
Kai Tamkun
0a0650feea node:dgram compatibility improvements (#16446) 2025-01-20 20:49:49 -08:00
Ciro Spaciari
bf0d937975 crypto: update root certificates to NSS 3.107 (#16388) 2025-01-14 02:22:43 +00:00
Jarred Sumner
313bf86da4 Fix debug-only crash (#16279) 2025-01-08 23:59:26 -08:00
Kai Tamkun
cfd05bdfcf Don't chmod UNIX sockets to 700 (#16200) 2025-01-06 21:25:57 -08:00
Jarred Sumner
1ae855223c Bump WebKit (#16068) 2024-12-31 14:48:54 -08:00
Don Isaac
ab52058439 fix(us): memory leak when getting root certificate (#16073) 2024-12-30 22:20:15 -08:00
Jarred Sumner
2ccdf0122c Fix edgecase with socketpair() impacting shell and spawn (#15725) 2024-12-12 01:23:40 -08:00
Jarred Sumner
b453360dff Fixes #15480 (#15611) 2024-12-05 21:15:21 -08:00
Ciro Spaciari
a2e2d114e9 fix(net/tls) fix backpressure pause on socket (#15543) 2024-12-03 12:53:48 -08:00
Ciro Spaciari
471fe7b886 fix(net/tls) fix reusePort, allowHalfOpen, FIN before reconnect (#15452)
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
2024-11-27 21:30:30 -08:00