Bug 381411

Summary: Crash when pulseaudio dies
Product: [Unmaintained] plasma-pa Reporter: Aleix Pol <aleixpol>
Component: generalAssignee: David Rosca <nowrep>
Status: RESOLVED FIXED    
Severity: normal CC: plasma-bugs-null
Priority: NOR    
Version First Reported In: unspecified   
Target Milestone: ---   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed/Implemented In:
Sentry Crash Report:

Description Aleix Pol 2017-06-19 18:51:53 UTC
Whenever you call "pulseaudio -k" Plasma restarts:

(gdb) where
#0  0x00007ffff09f2670 in raise () at /usr/lib/libc.so.6
#1  0x00007ffff09f3d00 in abort () at /usr/lib/libc.so.6
#2  0x00007ffff16aaf3e in qt_message_fatal (context=..., message=<synthetic pointer>...) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/global/qlogging.cpp:1690
#3  0x00007ffff16aaf3e in QMessageLogger::fatal(char const*, ...) const (this=this@entry=0x7fffffffd320, msg=msg@entry=0x7ffff198a478 "ASSERT: \"%s\" in file %s, line %d") at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/global/qlogging.cpp:796
#4  0x00007ffff16a669e in qt_assert(char const*, char const*, int) (assertion=<optimized out>, file=<optimized out>, line=<optimized out>) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/global/qglobal.cpp:3044
#5  0x00007fff3a94f17d in QPulseAudio::Context::connectToDaemon() (this=0x302e620) at /home/apol/devel/frameworks/plasma-pa/src/context.cpp:594
#6  0x00007fff3a95c7de in QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, void (QPulseAudio::Context::*)()>::call(void (QPulseAudio::Context::*)(), QPulseAudio::Context*, void**) (f=(void (QPulseAudio::Context::*)(QPulseAudio::Context * const)) 0x7fff3a94f140 <QPulseAudio::Context::connectToDaemon()>, o=0x302e620, arg=0x7fffffffd530) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:136
#7  0x00007fff3a95c753 in QtPrivate::FunctionPointer<void (QPulseAudio::Context::*)()>::call<QtPrivate::List<>, void>(void (QPulseAudio::Context::*)(), QPulseAudio::Context*, void**) (f=(void (QPulseAudio::Context::*)(QPulseAudio::Context * const)) 0x7fff3a94f140 <QPulseAudio::Context::connectToDaemon()>, o=0x302e620, arg=0x7fffffffd530) at /home/apol/devel/kde5/include/QtCore/qobjectdefs_impl.h:169
#8  0x00007fff3a95c676 in QtPrivate::QSlotObject<void (QPulseAudio::Context::*)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (which=1, this_=0x3a671f0, r=0x302e620, a=0x7fffffffd530, ret=0x0)
    at /home/apol/devel/kde5/include/QtCore/qobject_impl.h:120
#9  0x00007ffff18c3b16 in QtPrivate::QSlotObjectBase::call(QObject*, void**) (a=0x7fffffffd530, r=<optimized out>, this=<optimized out>) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject_impl.h:101
#10 0x00007ffff18c3b16 in QSingleShotTimer::timerEvent(QTimerEvent*) (this=0x3a67220) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qtimer.cpp:318
#11 0x00007ffff18b83db in QObject::event(QEvent*) (this=0x3a67220, e=<optimized out>) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qobject.cpp:1268
#12 0x00007ffff22aaafc in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=<optimized out>, receiver=0x3a67220, e=0x7fffffffd7f0) at /home/apol/devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3717
#13 0x00007ffff22b1e01 in QApplication::notify(QObject*, QEvent*) (this=0x7fffffffe190, receiver=0x3a67220, e=0x7fffffffd7f0) at /home/apol/devel/frameworks/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3476
#14 0x00007ffff188c588 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x3a67220, event=event@entry=0x7fffffffd7f0) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1018
#15 0x00007ffff18dde1e in QCoreApplication::sendEvent(QObject*, QEvent*) (event=0x7fffffffd7f0, receiver=<optimized out>) at ../../include/QtCore/../../../../../devel/frameworks/qt5/qtbase/src/corelib/kernel/qcoreapplication.h:233
#16 0x00007ffff18dde1e in QTimerInfoList::activateTimers() (this=0x762600) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qtimerinfo_unix.cpp:643
#17 0x00007ffff18de5c1 in timerSourceDispatch(GSource*, GSourceFunc, gpointer) (source=<optimized out>) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:182
#18 0x00007fffe9fa6a47 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#19 0x00007fffe9fa6c78 in  () at /usr/lib/libglib-2.0.so.0
#20 0x00007fffe9fa6d0c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#21 0x00007ffff18df07f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x76e220, flags=...) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:423
#22 0x00007ffff188ad2a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fffffffda30, flags=..., flags@entry=...) at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qeventloop.cpp:212
#23 0x00007ffff1893204 in QCoreApplication::exec() () at /home/apol/devel/frameworks/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1291
#24 0x0000000000422f93 in main(int, char**) (argc=1, argv=0x7fffffffe298) at /home/apol/devel/frameworks/plasma-workspace/shell/main.cpp:166
Comment 1 David Rosca 2017-06-19 19:13:54 UTC
Git commit 70f0903142968ce950e7d05341fc3d9abbecddd4 by David Rosca.
Committed on 19/06/2017 at 19:13.
Pushed by drosca into branch 'Plasma/5.10'.

Context: Return early from connectToDaemon when already connected

connectToDaemon is called after 1 second delay when PulseAudio context
becomes invalid, but it is also called when PulseAudio service registers
on DBus.

In case when PulseAudio crashes and immediately restarts, the delayed
call to connectToDaemon will be called when already connected which will
open second connection and leak the first one.
It also leads to assert with debug build.

Differential Revision: https://phabricator.kde.org/D6282

M  +4    -7    src/context.cpp

https://commits.kde.org/plasma-pa/70f0903142968ce950e7d05341fc3d9abbecddd4