Files
bun.sh/test/cli/hot
robobun 562f82d3f8 Fix Windows watcher index out of bounds crash when events exceed buffer size (#21400)
## 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>
2025-07-28 15:43:54 -07:00
..
2024-03-12 05:38:59 -07:00
2024-10-18 01:14:42 +00:00