Closed eevee closed 6 years ago
Known regression in 0.7. Definitely a release blocker though.
I think I fixed this in https://github.com/mgba-emu/mgba/commit/1079e0346463b8edd6f6d6a0a212e335a496698d. Let me know if you still see it.
Now I get a freeze, which appears to be different. But it's pretty consistent:
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
I thought I fixed that bug...
Appears to be fixed by 6d4d014cfddedde7a46c3ced171669594b911a7b!
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: