Bug 286698 - kmix crash with pulse audio
Summary: kmix crash with pulse audio
Status: RESOLVED DUPLICATE of bug 285017
Alias: None
Product: kmix
Classification: Applications
Component: Backend: Pulseaudio (show other bugs)
Version: unspecified
Platform: openSUSE Linux
: NOR crash
Target Milestone: ---
Assignee: Colin Guthrie
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-11-15 15:54 UTC by Alin M Elena
Modified: 2011-11-29 13:32 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Alin M Elena 2011-11-15 15:54:19 UTC
Application: kmix (3.9-plus)
KDE Platform Version: 4.7.3 (4.7.3) "release 1"
Qt Version: 4.8.0
Operating System: Linux 3.1.0-2-desktop x86_64
Distribution: "openSUSE 12.2 Milestone 0 (x86_64)"

-- Information about the crash:
I have observed that after a while kmix takes 100% of one core...
at that time amarok was playing.
killing it and restarting usually solved the problem.
then one day.. I decided to install the debug packages
and then start it from konsole with --nofork..
thjs is how I got this nice crash... and the beautiful trace.

Alin


- What I was doing when the application crashed:

- Unusual behavior I noticed:

- Custom settings of the application:

-- Backtrace:
Application: KMix (kmix), signal: Segmentation fault
[Current thread is 1 (Thread 0x7f004e5d87a0 (LWP 7998))]

Thread 3 (Thread 0x7f002b77b700 (LWP 7999)):
#0  0x00007f004deba3a3 in poll () from /lib64/libc.so.6
#1  0x00007f0043511a98 in ?? () from /usr/lib64/libglib-2.0.so.0
#2  0x00007f0043511f59 in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#3  0x00007f004b89adb6 in QEventDispatcherGlib::processEvents (this=0xb0ef80, flags=<optimized out>) at kernel/qeventdispatcher_glib.cpp:426
#4  0x00007f004b86ab12 in QEventLoop::processEvents (this=<optimized out>, flags=...) at kernel/qeventloop.cpp:149
#5  0x00007f004b86ad67 in QEventLoop::exec (this=0x7f002b77acf0, flags=...) at kernel/qeventloop.cpp:204
#6  0x00007f004b76c137 in QThread::exec (this=<optimized out>) at thread/qthread.cpp:501
#7  0x00007f004b84a91f in QInotifyFileSystemWatcherEngine::run (this=0xac9e70) at io/qfilesystemwatcher_inotify.cpp:248
#8  0x00007f004b76f15b in QThreadPrivate::start (arg=0xac9e70) at thread/qthread_unix.cpp:298
#9  0x00007f003ebe025a in ?? () from /usr/lib64/libGL.so.1
#10 0x00007f004b4d7f05 in start_thread () from /lib64/libpthread.so.0
#11 0x00007f004dec34bd in clone () from /lib64/libc.so.6

Thread 2 (Thread 0x7f002a776700 (LWP 8001)):
#0  0x00007f004deba388 in poll () from /lib64/libc.so.6
#1  0x00007f0043511a98 in ?? () from /usr/lib64/libglib-2.0.so.0
#2  0x00007f0043511f59 in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#3  0x00007f004b89adb6 in QEventDispatcherGlib::processEvents (this=0x9b8270, flags=<optimized out>) at kernel/qeventdispatcher_glib.cpp:426
#4  0x00007f004b86ab12 in QEventLoop::processEvents (this=<optimized out>, flags=...) at kernel/qeventloop.cpp:149
#5  0x00007f004b86ad67 in QEventLoop::exec (this=0x7f002a775d20, flags=...) at kernel/qeventloop.cpp:204
#6  0x00007f004b76c137 in QThread::exec (this=<optimized out>) at thread/qthread.cpp:501
#7  0x00007f004b76f15b in QThreadPrivate::start (arg=0xadc990) at thread/qthread_unix.cpp:298
#8  0x00007f003ebe025a in ?? () from /usr/lib64/libGL.so.1
#9  0x00007f004b4d7f05 in start_thread () from /lib64/libpthread.so.0
#10 0x00007f004dec34bd in clone () from /lib64/libc.so.6

Thread 1 (Thread 0x7f004e5d87a0 (LWP 7998)):
[KCrash Handler]
#6  0x00007f004e1d0653 in MDWSlider::update (this=0x897020) at /usr/src/debug/kdemultimedia-4.7.46_20111113/kmix/gui/mdwslider.cpp:990
#7  0x00007f004e1cbebb in ViewDockAreaPopup::refreshVolumeLevels (this=<optimized out>) at /usr/src/debug/kdemultimedia-4.7.46_20111113/kmix/gui/viewdockareapopup.cpp:159
#8  0x00007f004b87fbd1 in QMetaObject::activate (sender=0x923320, m=<optimized out>, local_signal_index=<optimized out>, argv=0x0) at kernel/qobject.cpp:3547
#9  0x00007f004b87fbd1 in QMetaObject::activate (sender=0x99a6f0, m=<optimized out>, local_signal_index=<optimized out>, argv=0x0) at kernel/qobject.cpp:3547
#10 0x00007f004e1a5bec in Mixer_Backend::readSetFromHW (this=0x99a6f0) at /usr/src/debug/kdemultimedia-4.7.46_20111113/kmix/backends/mixer_backend.cpp:155
#11 0x00007f004e1b4e45 in sink_cb (c=<optimized out>, i=<optimized out>, eol=<optimized out>) at /usr/src/debug/kdemultimedia-4.7.46_20111113/kmix/backends/mixer_pulse.cpp:191
#12 0x00007f004c53e694 in context_get_sink_info_callback (pd=<optimized out>, command=<optimized out>, tag=<optimized out>, t=0xad5570, userdata=0x946400) at pulse/introspect.c:272
#13 0x00007f0043a39073 in run_action (pd=0x956370, r=0x921cc0, command=2, ts=0xad5570) at pulsecore/pdispatch.c:279
#14 0x00007f0043a393e3 in pa_pdispatch_run (pd=0x956370, packet=<optimized out>, creds=0x67e880, userdata=0x9a10b0) at pulsecore/pdispatch.c:331
#15 0x00007f004c534ddd in pstream_packet_callback (p=<optimized out>, packet=0xad66a0, creds=0x67e880, userdata=0x9a10b0) at pulse/context.c:335
#16 0x00007f0043a3dc7b in do_read (p=0x67e730) at pulsecore/pstream.c:809
#17 do_something (p=0x67e730) at pulsecore/pstream.c:177
#18 0x00007f004c320bf3 in dispatch_func (source=0x935ee0, callback=<optimized out>, userdata=<optimized out>) at pulse/glib-mainloop.c:584
#19 0x00007f004351158d in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
#20 0x00007f0043511d88 in ?? () from /usr/lib64/libglib-2.0.so.0
#21 0x00007f0043511f59 in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#22 0x00007f004b89ad4f in QEventDispatcherGlib::processEvents (this=0x608100, flags=<optimized out>) at kernel/qeventdispatcher_glib.cpp:424
#23 0x00007f004aa78ece in QGuiEventDispatcherGlib::processEvents (this=<optimized out>, flags=<optimized out>) at kernel/qguieventdispatcher_glib.cpp:204
#24 0x00007f004b86ab12 in QEventLoop::processEvents (this=<optimized out>, flags=...) at kernel/qeventloop.cpp:149
#25 0x00007f004b86ad67 in QEventLoop::exec (this=0x7fff8d83e910, flags=...) at kernel/qeventloop.cpp:204
#26 0x00007f004b86f8c5 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1148
#27 0x00007f004e1bc52a in kdemain (argc=2, argv=0x7fff8d83eed8) at /usr/src/debug/kdemultimedia-4.7.46_20111113/kmix/apps/main.cpp:75
#28 0x00007f004de0b1bd in __libc_start_main () from /lib64/libc.so.6
#29 0x0000000000400681 in _start () at ../sysdeps/x86_64/elf/start.S:113

Possible duplicates by query: bug 285017, bug 283194.

Reported using DrKonqi
Comment 1 Alin M Elena 2011-11-15 16:04:55 UTC
it seems to crash every time the song changes in amarok.

Alin
Comment 2 Christian Esken 2011-11-19 08:52:08 UTC
Thanks for the bug report.

I found the crash is in line 990 (KDE 4.7.3):

986 	void MDWSlider::update()
987 	{
988 	
989 	if ( m_slidersPlayback.count() != 0 || m_mixdevice->playbackVolume().hasSwitch() )
990 	updateInternal(m_mixdevice->playbackVolume(), m_slidersPlayback, m_mixdevice->isMuted() );    // <<<<<<<< HERE
991 	if ( m_slidersCapture.count() != 0 || m_mixdevice->captureVolume().hasSwitch() )
992 	updateInternal(m_mixdevice->captureVolume(), m_slidersCapture, m_mixdevice->isNotRecSource() );


This means m_mixdevice is invalid or null. Looks like a race condition with object creation and object publishing. Or object deletion and still using it.

I do *not* think this problem is a problem in the Pulseaudio backend. I will still assign it to it.
Colin, will you have a look? If you cannot do anything please just assign it back to me.
Comment 3 Colin Guthrie 2011-11-22 09:35:23 UTC
Ben Cooksley also had a similar trace:

    Application: KMix (kmix), signal: Segmentation fault
    [Current thread is 1 (Thread 0x7f3317e20800 (LWP 3779))]
     
    Thread 2 (Thread 0x7f32f3684700 (LWP 3782)):
    #0  0x00007f3312f60423 in poll () from /lib64/libc.so.6
    #1  0x00007f33139dda98 in ?? () from /usr/lib64/libglib-2.0.so.0
    #2  0x00007f33139ddf59 in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
    #3  0x00007f3314a446da in QEventDispatcherGlib::processEvents (this=0xa5fa60, flags=...) at /home/ben/kdesvn/qt-copy/src/corelib/kernel/qeventdispatcher_glib.cpp:426
    #4  0x00007f3314a05e14 in QEventLoop::processEvents (this=0x7f32f3683ce0, flags=...) at /home/ben/kdesvn/qt-copy/src/corelib/kernel/qeventloop.cpp:149
    #5  0x00007f3314a05f9e in QEventLoop::exec (this=0x7f32f3683ce0, flags=...) at /home/ben/kdesvn/qt-copy/src/corelib/kernel/qeventloop.cpp:204
    #6  0x00007f33148d48eb in QThread::exec (this=0xa5d100) at /home/ben/kdesvn/qt-copy/src/corelib/thread/qthread.cpp:501
    #7  0x00007f33149e119f in QInotifyFileSystemWatcherEngine::run (this=0xa5d100) at /home/ben/kdesvn/qt-copy/src/corelib/io/qfilesystemwatcher_inotify.cpp:248
    #8  0x00007f33148d7218 in QThreadPrivate::start (arg=0xa5d100) at /home/ben/kdesvn/qt-copy/src/corelib/thread/qthread_unix.cpp:298
    #9  0x00007f3314619f05 in start_thread () from /lib64/libpthread.so.0
    #10 0x00007f3312f6953d in clone () from /lib64/libc.so.6
     
    Thread 1 (Thread 0x7f3317e20800 (LWP 3779)):
    [KCrash Handler]
    #6  0x00007f3317a180f3 in MDWSlider::update (this=0xa28c70) at /home/ben/kdesvn/kdemultimedia/kmix/gui/mdwslider.cpp:990
    #7  0x00007f3317a1395b in ViewDockAreaPopup::refreshVolumeLevels (this=<optimized out>) at /home/ben/kdesvn/kdemultimedia/kmix/gui/viewdockareapopup.cpp:159
    #8  0x00007f3314a267f6 in QMetaObject::activate (sender=0x998590, m=0x7f3317c4fa40, local_signal_index=1, argv=0x0) at /home/ben/kdesvn/qt-copy/src/corelib/kernel/qobject.cpp:3547
    #9  0x00007f3314a267f6 in QMetaObject::activate (sender=0x997350, m=0x7f3317c4b860, local_signal_index=0, argv=0x0) at /home/ben/kdesvn/qt-copy/src/corelib/kernel/qobject.cpp:3547
    #10 0x00007f33179edc0c in Mixer_Backend::readSetFromHW (this=0x997350) at /home/ben/kdesvn/kdemultimedia/kmix/backends/mixer_backend.cpp:155
    #11 0x00007f33179fecaf in sink_input_cb (c=<optimized out>, i=0x0, eol=<optimized out>) at /home/ben/kdesvn/kdemultimedia/kmix/backends/mixer_pulse.cpp:309
    #12 0x00007f3313eacbac in ?? () from /usr/lib64/libpulse.so.0
    #13 0x00007f330910b073 in ?? () from /usr/lib64/libpulsecommon-1.1.so
    #14 0x00007f330910b3e3 in pa_pdispatch_run () from /usr/lib64/libpulsecommon-1.1.so
    #15 0x00007f3313ea3ddd in ?? () from /usr/lib64/libpulse.so.0
    #16 0x00007f330910fc7b in ?? () from /usr/lib64/libpulsecommon-1.1.so
    #17 0x00007f3313c8fbf3 in ?? () from /usr/lib64/libpulse-mainloop-glib.so.0
    #18 0x00007f33139dd58d in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
    #19 0x00007f33139ddd88 in ?? () from /usr/lib64/libglib-2.0.so.0
    #20 0x00007f33139ddf59 in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
    #21 0x00007f3314a446b7 in QEventDispatcherGlib::processEvents (this=0x60d040, flags=...) at /home/ben/kdesvn/qt-copy/src/corelib/kernel/qeventdispatcher_glib.cpp:424
    #22 0x00007f3315dfd9ac in QGuiEventDispatcherGlib::processEvents (this=0x60d040, flags=...) at /home/ben/kdesvn/qt-copy/src/gui/kernel/qguieventdispatcher_glib.cpp:204
    #23 0x00007f3314a05e14 in QEventLoop::processEvents (this=0x7fff98cab370, flags=...) at /home/ben/kdesvn/qt-copy/src/corelib/kernel/qeventloop.cpp:149
    #24 0x00007f3314a05f9e in QEventLoop::exec (this=0x7fff98cab370, flags=...) at /home/ben/kdesvn/qt-copy/src/corelib/kernel/qeventloop.cpp:204
    #25 0x00007f3314a08bca in QCoreApplication::exec () at /home/ben/kdesvn/qt-copy/src/corelib/kernel/qcoreapplication.cpp:1148
    #26 0x00007f3315d239c4 in QApplication::exec () at /home/ben/kdesvn/qt-copy/src/gui/kernel/qapplication.cpp:3811
    #27 0x00007f3317a04422 in kdemain (argc=1, argv=0x7fff98cab908) at /home/ben/kdesvn/kdemultimedia/kmix/apps/main.cpp:72
    #28 0x00007f3312eb123d in __libc_start_main () from /lib64/libc.so.6
    #29 0x00000000004007e1 in _start () at ../sysdeps/x86_64/elf/start.S:113
     



So I'm guessing that somehow the VideDockAreaPopup has some stale references that are not being cleared out properly.

IIRC there is some code where I try and delete all the old stuff on redraw etc., but perhaps this is masked somewhere in an expanded class for the viewdock stuff?

Like Christian I don't think this is the PA backend specifically but rather the general support in Kmix for "dynamic mixers" i.e. mixers whose elements come and go. Of course that infrastructure is primarily *for* PA but I believe Christian is using it a little for other stuff now (MPRIS) too.

Not sure I'll be able to look at this soon :s
Comment 4 Myriam Schweingruber 2011-11-29 13:32:41 UTC
Several duplicates with the same backtrace, master bug is bug 285017

*** This bug has been marked as a duplicate of bug 285017 ***