beyond-all-reason / beyond-all-reason/RecoilEngine
Watchdog fires when Smart Area Reclaim widget performs wide-area scan on recoil_2026.07.04 + NVIDIA 616.56
- Dominant language
- C++
- Stars
- 679
- Forks
- 290
- Avg merge
- 3d 2h
- Merged PRs (30d)
- 40
Description
**Describe the bug**
In engine build `recoil_2026.07.04`, the main-thread watchdog fires and kills the game ~50 minutes into a match when the Smart Area Reclaim widget (`beyond-all-reason/bar_widgets/gui_smart_reclaim.lua`) performs a wide-area scan. The widget code itself is unchanged — the regression appears to be in how this engine build handles the scan in combination with new NVIDIA drivers (driver `32.0.16.1656`, Aug 20 2026). Same widget on engine build `recoil_2026.06.12` does not trigger the watchdog.
**Reproduction**
1. BAR launcher → engine recoil_2026.07.04 (current bundled version)
2. Enable the Smart Area Reclaim widget from `beyond-all-reason/bar_widgets`
3. Play a wide-reclaim map (confirmed on "All That Glitters v2.2.3")
4. At roughly the 45–50 minute mark, a teammate selects a wide reclaim area
5. Main thread blocks on the widget's reclaim scan for ~30+ seconds
6. Watchdog fires; game dies
**Log signature**
```
[Smart Area Reclaim] Warning: Smart reclaim area is too large, limiting size (repeating every few minutes leading up to crash)
[t=00:48:13.789421] Warning: [Watchdog] Hang detection triggered for Spring 2026.07.04.
[t=00:48:13.789507] Warning: (in threads: {main,load,audio,vfsi}={1,0,0,0})
```
The `main=1` line is the engine flagging the **main thread** as the one waiting, not load/audio/vfsi. That points squarely at the Lua-side widget scan blocking the main thread — but on the previous engine build the same scan completes inside the frame budget.
**Expected behavior**
Watchdog should not trigger on widget-driven reclaim scans. Either:
1. The widget's scan should be moved off the main thread, **or**
2. The engine should expose a way for widgets to yield during wide-area scans (so the main thread isn't blocked), **or**
3. The engine should increase the watchdog timeout when the main thread is in a known-Lua yield state.
**Actual behavior**
Game crashes to desktop after the watchdog fires.
**System info**
- OS: Windows 11
- GPU: NVIDIA GeForce RTX 5070 Ti Laptop GPU
- Driver: 32.0.16.1656 (Aug 20 2026)
- BAR: Beyond All Reason test-31177-b64aa4e
- Engine: recoil_2026.07.04
- Map: All That Glitters v2.2.3
- Widget: gui_smart_reclaim.lua (from beyond-all-reason/bar_widgets)
- infolog.txt attached
**Cross-reference**
Filed the widget-side report at beyond-all-reason/bar_widgets — same user, same infolog.
**Workaround**
Disable Smart Area Reclaim widget. Game stable for 60+ minutes after that.
Contributor guide
Research direction
Start with the watchdog log signature and the scan in beyond-all-reason/bar_widgets/gui_smart_reclaim.lua, then compare behavior between recoil_2026.07.04 and recoil_2026.06.12 using the attached infolog. Investigate how the engine handles the widget's wide-area scan and main-thread waiting. Done means wide reclaim scans no longer trigger the watchdog or crash the game under the reported setup.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, lua
- Domain
- game-dev, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100