Opened 4 years ago
Closed 4 years ago
#13413 closed defect (fixed)
COMMON: Systematic crash after adding any new game in 2.6.0git
| Reported by: | dwatteau | Owned by: | sev- |
|---|---|---|---|
| Priority: | blocker | Component: | Common |
| Version: | Keywords: | ||
| Cc: | Game: |
Description
This is with 2.6.0git HEAD on macOS x64. This also happens with the daily builds, at least for a few weeks I'd say.
I see the same crashes on a PS3 daily build too.
How to reproduce:
- Just add a game, any game, for any engine (as far as I an say)
- Press OK
- ScummVM systematically crashes.
Note: The new game does get added to ScummVM, though; it is added to its configuration file, and it's there if I restart ScummVM.
(I don't have any non-ASCII string anywhere in my paths or in the configuration file.)
lldb backtrace below:
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
frame #0: 0x00000001003ac0fd scummvm`Common::BaseString<char32_t>::getUnsignedValue(this=0x000000010332d828, pos=0) const at base-str.cpp:788:16
785
786 TEMPLATE uint BASESTRING::getUnsignedValue(uint pos) const {
787 const int shift = (sizeof(uint) - sizeof(value_type)) * 8;
-> 788 return ((uint)_str[pos]) << shift >> shift;
789 }
790
791 // Hash function for strings, taken from CPython.
Target 0: (scummvm) stopped.
(lldb) p pos
(uint) $0 = 0
(lldb) p _str
(Common::BaseString<char32_t>::value_type *) $1 = 0x0000000000000000
(lldb) p shift
(const int) $3 = 0
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
* frame #0: 0x00000001003ac0fd scummvm`Common::BaseString<char32_t>::getUnsignedValue(this=0x000000010332d828, pos=0) const at base-str.cpp:788:16
frame #1: 0x00000001003ac07b scummvm`Common::BaseString<char32_t>::hash(this=0x000000010332d828) const at base-str.cpp:793:20
frame #2: 0x00000001002210e9 scummvm`Common::Hash<Common::U32String>::operator(this=0x0000000103080d24, s=0x000000010332d828)(Common::U32String const&) const at hash-str.h:69:12
frame #3: 0x0000000100221008 scummvm`Common::HashMap<Common::U32String, int, Common::Hash<Common::U32String>, Common::EqualTo<Common::U32String> >::lookup(this=0x0000000103080740, key=0x000000010332d828) const at hashmap.h:502:25
frame #4: 0x000000010021c1a1 scummvm`Common::HashMap<Common::U32String, int, Common::Hash<Common::U32String>, Common::EqualTo<Common::U32String> >::contains(this=0x0000000103080740, key=0x000000010332d828) const at hashmap.h:597:18
frame #5: 0x00000001002237d2 scummvm`GUI::GroupedListWidget::groupByAttribute(this=0x0000000103080400) at groupedlist.cpp:133:25
frame #6: 0x0000000100223399 scummvm`GUI::GroupedListWidget::setList(this=0x0000000103080400, list=0x00007ff7bfefcba8, colors=0x00007ff7bfefcb88) at groupedlist.cpp:70:2
frame #7: 0x00000001001bcc3d scummvm`GUI::LauncherSimple::updateListing(this=0x0000000103042e00) at launcher.cpp:1088:9
frame #8: 0x00000001001b99a2 scummvm`GUI::LauncherDialog::doGameDetection(this=0x0000000103042e00, path=0x00007ff7bfefdcc0) at launcher.cpp:648:4
frame #9: 0x00000001001b933c scummvm`GUI::LauncherDialog::addGame(this=0x0000000103042e00) at launcher.cpp:400:15
frame #10: 0x00000001001ba68b scummvm`GUI::LauncherDialog::handleCommand(this=0x0000000103042e00, sender=0x0000000101e192f0, cmd=1094992967, data=0) at launcher.cpp:666:3
frame #11: 0x00000001001bf147 scummvm`GUI::LauncherSimple::handleCommand(this=0x0000000103042e00, sender=0x0000000101e192f0, cmd=1094992967, data=0) at launcher.cpp:1260:19
frame #12: 0x000000010021e883 scummvm`GUI::CommandSender::sendCommand(this=0x0000000101e192f0, cmd=1094992967, data=0) at object.h:54:13
frame #13: 0x0000000100210627 scummvm`GUI::ButtonWidget::handleMouseUp(this=0x0000000101e192f0, x=129, y=6, button=1, clickCount=1) at widget.cpp:379:3
frame #14: 0x0000000100211698 scummvm`GUI::DropdownButtonWidget::handleMouseUp(this=0x0000000101e192f0, x=129, y=6, button=1, clickCount=1) at widget.cpp:505:17
frame #15: 0x00000001001abaae scummvm`GUI::Dialog::handleMouseUp(this=0x0000000103042e00, x=382, y=511, button=1, clickCount=1) at dialog.cpp:233:6
frame #16: 0x00000001001b5ab9 scummvm`GUI::GuiManager::processEvent(this=0x0000000102838e00, event=0x00007ff7bfefe878, activeDialog=0x0000000103042e00) at gui-manager.cpp:788:17
frame #17: 0x00000001001b5086 scummvm`GUI::GuiManager::runLoop(this=0x0000000102838e00) at gui-manager.cpp:505:4
frame #18: 0x00000001001b901a scummvm`GUI::LauncherDialog::run(this=0x0000000103042e00) at launcher.cpp:314:8
frame #19: 0x00000001001bbcdb scummvm`GUI::LauncherChooser::runModal(this=0x00007ff7bfefe948) at launcher.cpp:952:16
frame #20: 0x000000010004cc6b scummvm`launcherDialog() at main.cpp:106:14
frame #21: 0x000000010004bf97 scummvm`::scummvm_main(argc=1, argv=0x00007ff7bfeffa08) at main.cpp:572:3
frame #22: 0x000000010004825d scummvm`main(argc=1, argv=0x00007ff7bfeffa08) at macosx-main.cpp:44:12
frame #23: 0x000000010100151e dyld`start + 462
Change History (3)
comment:1 by , 4 years ago
comment:2 by , 4 years ago
Oh, I thought I had very common configuration files, but indeed I can confirm that I had just enabled that nice "Sort by Editor" setting on both setups.
Thank you for looking into this

Thank you for the bug report.
This is actually a bug I also found two weeks ago, and it only happens when grouping games in the launcher list mode.
The crash occurs because the list of games (
_dataList) and the list of attributes (_attributeValues) are out of sync whenGroupedListWidget::groupByAttributeis called after adding a game. The former has already been updated with the new game, but the later is not yet updated and has one less item.The issue is in
LauncherSimple::updateListing(). It first callsGroupedListWidget::setListwhich only updates the_dataListand then callsgroupEntries()which callsGroupedListWidget::setAttributeValues, which updates the_attributeValues. But before we get thereGroupedListWidget::setListcalledgroupByAttribute()after_dataListhas been updated, but before we get the new attributes list.I started thinking how to reorganise the code to avoid this issue, but I found other issues with the way the
GroupedListWidgetis implemented while doing so. So it may take a bit longer to fix. And because of this it's good to have a bug to track the issue :-)