mgba-emu / mgba

mGBA Game Boy Advance Emulator
https://mgba.io/
Mozilla Public License 2.0
5.66k stars 777 forks source link

Intermittent crash when loading a second GB ROM #1110

Closed eevee closed 6 years ago

eevee commented 6 years ago

This is proving difficult to reproduce reliably (opening the tile viewer and debugger seems to help), but I finally got a stack trace, commit aa0f98:

Thread 13 "CPU Thread" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffc88a7700 (LWP 18574)]
0x00007ffff7746b2f in mTileCacheWritePalette (cache=0x5555560be610, entry=0, color=16777215) at /home/eevee/dev-foreign/mgba.git/src/core/tile-cache.c:98                                                                                   
98              cache->palette[entry] = color;
(gdb) bt
#0  0x00007ffff7746b2f in mTileCacheWritePalette (cache=0x5555560be610, entry=0, color=16777215) at /home/eevee/dev-foreign/mgba.git/src/core/tile-cache.c:98
#1  0x00007ffff77354d2 in mCacheSetWritePalette (cache=0x5555563c9300, entry=0, color=16777215) at /home/eevee/dev-foreign/mgba.git/src/core/cache-set.c:60
#2  0x00007ffff777641c in GBVideoSoftwareRendererWritePalette (renderer=0x5555564afa30, index=0, value=32767) at /home/eevee/dev-foreign/mgba.git/src/gb/renderers/software.c:442
#3  0x00007ffff7770b9d in GBVideoReset (video=0x7fffdc0bd268) at /home/eevee/dev-foreign/mgba.git/src/gb/video.c:135
#4  0x00007ffff77654f9 in GBReset (cpu=0x7fffdc0be000) at /home/eevee/dev-foreign/mgba.git/src/gb/gb.c:457
#5  0x00007ffff775bba1 in LR35902Reset (cpu=0x7fffdc0be000) at /home/eevee/dev-foreign/mgba.git/src/lr35902/lr35902.c:70
#6  0x00007ffff7762164 in _GBCoreReset (core=0x5555564ae600) at /home/eevee/dev-foreign/mgba.git/src/gb/core.c:455
#7  0x00007ffff7745021 in _mCoreThreadRun (context=0x7fffb41466a0) at /home/eevee/dev-foreign/mgba.git/src/core/thread.c:175
#8  0x00007ffff08e2075 in start_thread () from /usr/lib/libpthread.so.0
#9  0x00007ffff061753f in clone () from /usr/lib/libc.so.6
(gdb) 
endrift commented 6 years ago

Known regression in 0.7. Definitely a release blocker though.

endrift commented 6 years ago

I think I fixed this in https://github.com/mgba-emu/mgba/commit/1079e0346463b8edd6f6d6a0a212e335a496698d. Let me know if you still see it.

eevee commented 6 years ago

Now I get a freeze, which appears to be different. But it's pretty consistent:

  1. Open a ROM (I'm using Oracle of Ages)
  2. Open the palette, sprite, and tile windows
  3. Re-open the same ROM

I seem to hit a deadlock:

Thread 9 (Thread 0x7fffc1329700 (LWP 24027)):
#0  0x00007ffff08eb29c in __lll_lock_wait () from /usr/lib/libpthread.so.0                                                                                                                                                                  
#1  0x00007ffff08e6630 in __pthread_mutex_cond_lock () from /usr/lib/libpthread.so.0                                                                                                                                                        
#2  0x00007ffff08e7ee8 in pthread_cond_wait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0                                                                                                                                                   
#3  0x00007ffff77444fe in ConditionWait (cond=0x55555620fa60, mutex=0x55555620fa90) at /home/eevee/dev-foreign/mgba.git/include/mgba-util/platform/posix/threading.h:57                                                                     
#4  0x00007ffff774485b in mCoreSyncProduceAudio (sync=0x55555620f9c8, buf=0x5555561e3bd0, samples=3072) at /home/eevee/dev-foreign/mgba.git/src/core/sync.c:89                                                                              
#5  0x00007ffff775ed55 in _sample (timing=0x7fffdc0b5860, user=0x7fffdc0b5568, cyclesLate=0) at /home/eevee/dev-foreign/mgba.git/src/gb/audio.c:670                                                                                         
#6  0x00007ffff7747b9d in mTimingTick (timing=0x7fffdc0b5860, cycles=176) at /home/eevee/dev-foreign/mgba.git/src/core/timing.c:80                                                                                                          
#7  0x00007ffff7765ba7 in GBProcessEvents (cpu=0x7fffdc0b6000) at /home/eevee/dev-foreign/mgba.git/src/gb/gb.c:643                                                                                                                          
#8  0x00007ffff775bfd1 in LR35902Run (cpu=0x7fffdc0b6000) at /home/eevee/dev-foreign/mgba.git/src/lr35902/lr35902.c:162                                                                                                                     
#9  0x00007ffff7762203 in _GBCoreRunLoop (core=0x5555561e2170) at /home/eevee/dev-foreign/mgba.git/src/gb/core.c:471                                                                                                                        
#10 0x00007ffff77450eb in _mCoreThreadRun (context=0x555555cff820) at /home/eevee/dev-foreign/mgba.git/src/core/thread.c:195                                                                                                                
#11 0x00007ffff08e2075 in start_thread () from /usr/lib/libpthread.so.0
#12 0x00007ffff061753f in clone () from /usr/lib/libc.so.6

Thread 4 (Thread 0x7fffcb577700 (LWP 24001)):
#0  0x00007ffff08e83f6 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
#1  0x00007ffff115e22d in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/libQt5Core.so.5                                                                                                                                     
#2  0x00007ffff1155c54 in ?? () from /usr/lib/libQt5Core.so.5
#3  0x00007ffff115db95 in ?? () from /usr/lib/libQt5Core.so.5
#4  0x00007ffff08e2075 in start_thread () from /usr/lib/libpthread.so.0
#5  0x00007ffff061753f in clone () from /usr/lib/libc.so.6

Thread 3 (Thread 0x7fffd0df8700 (LWP 23999)):
#0  0x00007ffff060cea9 in poll () from /usr/lib/libc.so.6
#1  0x00007fffe68a3523 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x00007fffe68a363e in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0                                                                                                                                                        
#3  0x00007ffff135ee49 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5                                                                                                       
#4  0x00007ffff130a85c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#5  0x00007ffff1153ac9 in QThread::exec() () from /usr/lib/libQt5Core.so.5
#6  0x00007fffe0392976 in ?? () from /usr/lib/libQt5DBus.so.5
#7  0x00007ffff115db95 in ?? () from /usr/lib/libQt5Core.so.5
#8  0x00007ffff08e2075 in start_thread () from /usr/lib/libpthread.so.0
#9  0x00007ffff061753f in clone () from /usr/lib/libc.so.6

Thread 2 (Thread 0x7fffdda89700 (LWP 23996)):
#0  0x00007ffff060cea9 in poll () from /usr/lib/libc.so.6
#1  0x00007fffe6166180 in ?? () from /usr/lib/libxcb.so.1
#2  0x00007fffe6167e4b in xcb_wait_for_event () from /usr/lib/libxcb.so.1
#3  0x00007fffe064ef1a in ?? () from /usr/lib/libQt5XcbQpa.so.5
#4  0x00007ffff115db95 in ?? () from /usr/lib/libQt5Core.so.5
#5  0x00007ffff08e2075 in start_thread () from /usr/lib/libpthread.so.0
#6  0x00007ffff061753f in clone () from /usr/lib/libc.so.6

Thread 1 (Thread 0x7ffff7f66140 (LWP 23992)):
#0  0x00007ffff08e8a6c in pthread_cond_broadcast@@GLIBC_2.3.2 () from /usr/lib/libpthread.so.0
#1  0x00007ffff7744a3a in ConditionWake (cond=0x55555620fa60) at /home/eevee/dev-foreign/mgba.git/include/mgba-util/platform/posix/threading.h:76                                                                                           
#2  0x00007ffff7744c17 in _waitUntilNotState (threadContext=0x55555620f950, oldState=THREAD_INTERRUPTING) at /home/eevee/dev-foreign/mgba.git/src/core/thread.c:72                                                                          
#3  0x00007ffff7745d08 in mCoreThreadInterrupt (threadContext=0x555555cff820) at /home/eevee/dev-foreign/mgba.git/src/core/thread.c:436                                                                                                     
#4  0x00005555556717fb in QGBA::CoreController::Interrupter::Interrupter (this=0x7fffffffcca0, parent=0x555555cff810, fromThread=false) at /home/eevee/dev-foreign/mgba.git/src/platform/qt/CoreController.cpp:799                          
#5  0x000055555566e87c in QGBA::CoreController::setDebugger (this=0x555555cff810, debugger=0x0) at /home/eevee/dev-foreign/mgba.git/src/platform/qt/CoreController.cpp:265                                                                  
#6  0x000055555566ef49 in QGBA::CoreController::stop (this=0x555555cff810) at /home/eevee/dev-foreign/mgba.git/src/platform/qt/CoreController.cpp:359                                                                                       
#7  0x000055555566df2f in QGBA::CoreController::~CoreController (this=0x555555cff810, __in_chrg=<optimized out>) at /home/eevee/dev-foreign/mgba.git/src/platform/qt/CoreController.cpp:204                                                 
#8  0x000055555566e0b8 in QGBA::CoreController::~CoreController (this=0x555555cff810, __in_chrg=<optimized out>) at /home/eevee/dev-foreign/mgba.git/src/platform/qt/CoreController.cpp:216                                                 
#9  0x0000555555766952 in std::_Sp_counted_ptr<QGBA::CoreController*, (__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x5555564110d0) at /usr/include/c++/8.1.1/bits/shared_ptr_base.h:383                                                    
#10 0x00005555556568a2 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x5555564110d0) at /usr/include/c++/8.1.1/bits/shared_ptr_base.h:161                                                                          
#11 0x00005555556565ed in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x7fffffffcdd8, __in_chrg=<optimized out>) at /usr/include/c++/8.1.1/bits/shared_ptr_base.h:712                                            
#12 0x0000555555656544 in std::__shared_ptr<QGBA::CoreController, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x7fffffffcdd0, __in_chrg=<optimized out>) at /usr/include/c++/8.1.1/bits/shared_ptr_base.h:1151                         
#13 0x0000555555657294 in std::__shared_ptr<QGBA::CoreController, (__gnu_cxx::_Lock_policy)2>::reset (this=0x555555c0ead8) at /usr/include/c++/8.1.1/bits/shared_ptr_base.h:1269                                                            
#14 0x000055555574aedd in QGBA::Window::<lambda()>::operator()(void) const (__closure=0x55555676bcf0) at /home/eevee/dev-foreign/mgba.git/src/platform/qt/Window.cpp:1838                                                                   
#15 0x000055555575d935 in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, QGBA::Window::setController(QGBA::CoreController*, const QString&)::<lambda()> >::call(QGBA::Window::<lambda()> &, void **) (f=...,     
    arg=0x7fffffffcf70) at /usr/include/qt/QtCore/qobjectdefs_impl.h:128
#16 0x000055555575ca94 in QtPrivate::Functor<QGBA::Window::setController(QGBA::CoreController*, const QString&)::<lambda()>, 0>::call<QtPrivate::List<>, void>(QGBA::Window::<lambda()> &, void *, void **) (f=..., arg=0x7fffffffcf70)     
    at /usr/include/qt/QtCore/qobjectdefs_impl.h:238
#17 0x000055555575c2ba in QtPrivate::QFunctorSlotObject<QGBA::Window::setController(QGBA::CoreController*, const QString&)::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (  
    which=1, this_=0x55555676bce0, r=0x7fffd8011480, a=0x7fffffffcf70, ret=0x0) at /usr/include/qt/QtCore/qobjectdefs_impl.h:421                                                                                                            
#18 0x00007ffff1335b60 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/libQt5Core.so.5
#19 0x000055555578ee5f in QGBA::CoreController::stopping (this=0x7fffd8011480) at /home/eevee/dev-foreign/mgba.git/build/qt/mgba-qt_autogen/EWIEGA46WW/moc_CoreController.cpp:481                                                           
#20 0x000055555578e0fd in QGBA::CoreController::qt_static_metacall (_o=0x7fffd8011480, _c=QMetaObject::InvokeMetaMethod, _id=3, _a=0x7fffbc02f6f0)                                                                                          
    at /home/eevee/dev-foreign/mgba.git/build/qt/mgba-qt_autogen/EWIEGA46WW/moc_CoreController.cpp:262
#21 0x00007ffff13362e2 in QObject::event(QEvent*) () from /usr/lib/libQt5Core.so.5
#22 0x00007ffff207b984 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#23 0x00007ffff208325b in QApplication::notify(QObject*, QEvent*) () from /usr/lib/libQt5Widgets.so.5
#24 0x00007ffff130bbc9 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/libQt5Core.so.5
#25 0x00007ffff130ec5c in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/libQt5Core.so.5                                                                                                           
#26 0x00007ffff135f864 in ?? () from /usr/lib/libQt5Core.so.5
#27 0x00007fffe68a3368 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#28 0x00007fffe68a35b1 in ?? () from /usr/lib/libglib-2.0.so.0
#29 0x00007fffe68a363e in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#30 0x00007ffff135ee49 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5                                                                                                       
#31 0x00007fffe06e3b32 in ?? () from /usr/lib/libQt5XcbQpa.so.5
#32 0x00007ffff130a85c in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/libQt5Core.so.5
#33 0x00007ffff1312b56 in QCoreApplication::exec() () from /usr/lib/libQt5Core.so.5
#34 0x000055555564ce1b in main (argc=1, argv=0x7fffffffdb48) at /home/eevee/dev-foreign/mgba.git/src/platform/qt/main.cpp:97                                                                                                                
endrift commented 6 years ago

I thought I fixed that bug...

eevee commented 6 years ago

Appears to be fixed by 6d4d014cfddedde7a46c3ced171669594b911a7b!