Comment 1 for bug 1026343

Revision history for this message
RJ Skerry-Ryan (rryan) wrote : Re: does not start ubuntu 12.04 amd64 Warning [Main]: failed to resolve JACK name method

The issue is that SoundManager gets into an infinite loop if there are no sound devices on the system.

Patrick sent a backtrace where the relevant part is this:

.... infinite loop continues until SIGSEGV from stack overflow...
#45078 0x00007ffff6529281 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#45079 0x0000000000789916 in SoundManager::queryDevices (this=0xf16e20)
    at src/soundmanager.cpp:373
#45080 0x000000000078a328 in SoundManager::getDeviceList (this=0xf16e20,
    filterAPI=..., bOutputDevices=true, bInputDevices=false)
    at src/soundmanager.cpp:161
#45081 0x000000000047a10c in DlgPrefSound::refreshDevices (this=0x170eca0)
    at src/dlgprefsound.cpp:404
#45082 0x0000000000845878 in DlgPrefSound::qt_static_metacall (_o=0x170eca0,
    _id=17, _a=0x7fffffffc7c0, _c=<optimized out>)
    at lin64_build/moc_dlgprefsound.cc:100
#45083 0x00007ffff6529281 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#45084 0x0000000000789916 in SoundManager::queryDevices (this=0xf16e20)
    at src/soundmanager.cpp:373
#45085 0x000000000078a328 in SoundManager::getDeviceList (this=0xf16e20,
    filterAPI=..., bOutputDevices=true, bInputDevices=false)
    at src/soundmanager.cpp:161
#45086 0x0000000000795462 in SoundManagerConfig::filterOutputs (this=0xf16e88,
    soundManager=0xf16e20) at src/soundmanagerconfig.cpp:247
#45087 0x000000000078c37a in SoundManager::setupDevices (this=0xf16e20)
    at src/soundmanager.cpp:390
#45088 0x0000000000587ec5 in MixxxApp::MixxxApp (this=0xef5020,
    pApp=0x7fffffffdcf0, args=...) at src/mixxx.cpp:404
#45089 0x000000000043c593 in main (argc=3, argv=0x7fffffffde98)
    at src/main.cpp:290

SoundManager::getDeviceList does not call queryDevices() unless there are no sound devices detected. Since queryDevices() does not produce any sound devices, the next time getDeviceList is called (which is invoked by signal/slot) the loop continues.