Replays crash when a training site construction window is open
Bug #1735090 reported by
GunChleoc
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
widelands |
Fix Released
|
High
|
Unassigned |
Bug Description
To reproduce, unzip open the attached replay with Build 19. Wait for the yellow player to start building the arena and training camp and open their construction site windows.
Fatal Exception: [b19/src/
The stack trace is masked by the emergency save, so we'll have to switch that off to investigate.
Related branches
lp://staging/~widelands-dev/widelands/fix_resend_player_command_in_inputqueues
- Widelands Developers: Pending requested
-
Diff: 43 lines (+9/-5)1 file modifiedsrc/wui/inputqueuedisplay.cc (+9/-5)
lp://staging/~widelands-dev/widelands/can_act
- SirVer: Approve
- GunChleoc: Needs Resubmitting
-
Diff: 36 lines (+3/-3)1 file modifiedsrc/wui/economy_options_window.cc (+3/-3)
Changed in widelands: | |
status: | New → Confirmed |
assignee: | nobody → SirVer (sirver) |
To post a comment you must log in.
This is the stacktrace for the issue:
#3 0x11162af90 in InputQueueDispl ay::radiogroup_ changed( int) (/Users/ sirver/ Desktop/ Programming/ cpp/widelands/ bzr_repo/ ../build/ debug/src/ widelands: x86_64+ 0x101912f90) :set_state( int) (/Users/ sirver/ Desktop/ Programming/ cpp/widelands/ bzr_repo/ ../build/ debug/src/ widelands: x86_64+ 0 ay::update_ priority_ buttons( ) (/Users/ sirver/ Desktop/ Programming/ cpp/widelands/ bzr_repo/ ../build/ debug/src/ widelands: x86_64+ 0x10190b40b) ay::max_ size_changed( ) (/Users/ sirver/ Desktop/ Programming/ cpp/widelands/ bzr_repo/ ../build/ debug/src/ widelands: x86_64+ 0x101907306) ay::think( ) (/Users/ sirver/ Desktop/ Programming/ cpp/widelands/ bzr_repo/ ../build/ debug/src/ widelands: x86_64+ 0x101
... various stuff related to boost signal
#19 0x110fe76b6 in UI::Radiogroup:
#20 0x11162340b in InputQueueDispl
#21 0x11161f306 in InputQueueDispl
#22 0x11162832e in InputQueueDispl
The problem is that if a window of a building is open while watching the replay and the priority buttons have been clicked in the game, this triggers the callback of the UI::Radiogroup, which assumed that it would only be called through *clicking* the buttons.
Since in the callback we do not check if the igbase can_act() for our current building_, we just send the player command. The code assumed it was sufficient to disable the radiobuttons in the replay, so the replay watcher cannot click on them.
Similar bugs might be potentially in other places too (e.g. productionsite max wares adjustments, warehouse settings or economy settings change), but I did not find any more on a quick glance.
To trigger it, the settings must have been adjusted in game and the replay must have the window open of the building that it was adjusted to.