mirror of
https://github.com/oven-sh/bun
synced 2026-02-10 10:58:56 +00:00
## Summary Fixes a crash in the Windows file watcher that occurred when the number of file system events exceeded the fixed `watch_events` buffer size (128). ## Problem The crash manifested as: ``` index out of bounds: index 128, len 128 ``` This happened when: 1. More than 128 file system events were generated in a single watch cycle 2. The code tried to access `this.watch_events[128]` on an array of length 128 (valid indices: 0-127) 3. Later, `std.sort.pdq()` would operate on an invalid array slice ## Solution Implemented a hybrid approach that preserves the original behavior while handling overflow gracefully: - **Fixed array for common case**: Uses the existing 128-element array when possible for optimal performance - **Dynamic allocation for overflow**: Switches to `ArrayList` only when needed - **Single-batch processing**: All events are still processed together in one batch, preserving event coalescing - **Graceful fallback**: Handles allocation failures with appropriate fallbacks ## Benefits - ✅ **Fixes the crash** while maintaining existing performance characteristics - ✅ **Preserves event coalescing** - events for the same file still get properly merged - ✅ **Single consolidated callback** instead of multiple partial updates - ✅ **Memory efficient** - no overhead for normal cases (≤128 events) - ✅ **Backward compatible** - no API changes ## Test Plan - [x] Compiles successfully with `bun run zig:check-windows` - [x] Preserves existing behavior for common case (≤128 events) - [x] Handles overflow case gracefully with dynamic allocation 🤖 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> Co-authored-by: Jarred Sumner <jarred@bun.sh> Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>