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

Open
#3,318 1 comment 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.