Bug 375872 - Plasma crashes when killing pulseaudio
Summary: Plasma crashes when killing pulseaudio
Status: RESOLVED FIXED
Alias: None
Product: plasma-pa
Classification: Plasma
Component: general (show other bugs)
Version: 5.8.5
Platform: Arch Linux Linux
: NOR crash
Target Milestone: ---
Assignee: David Rosca
URL:
Keywords: drkonqi
Depends on:
Blocks:
 
Reported: 2017-02-01 23:01 UTC by Łukasz Żarnowiecki
Modified: 2017-02-02 13:26 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In: 5.8.6
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Łukasz Żarnowiecki 2017-02-01 23:01:47 UTC
Application: plasmashell (5.8.5)

Qt Version: 5.8.0
Frameworks Version: 5.30.0
Operating System: Linux 4.9.6-1-ARCH x86_64
Distribution (Platform): Archlinux Packages

-- Information about the crash:
When killing pulseaudio with pulseaudio -k, plasma crashes and restarts immediately.

The crash can be reproduced every time.

-- Backtrace:
Application: Plazma (plasmashell), signal: Aborted
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[Current thread is 1 (Thread 0x7fa5b011b800 (LWP 642))]

Thread 9 (Thread 0x7fa4d2ba1700 (LWP 4317)):
#0  0x00007fa5a978c48d in poll () at /usr/lib/libc.so.6
#1  0x00007fa5a2aef786 in  () at /usr/lib/libglib-2.0.so.0
#2  0x00007fa5a2aef89c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#3  0x00007fa5aa0b24db in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fa4c80008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:425
#4  0x00007fa5aa05bd0a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fa4d2ba0da0, flags=..., flags@entry=...) at kernel/qeventloop.cpp:212
#5  0x00007fa5a9e7dae3 in QThread::exec() (this=<optimized out>) at thread/qthread.cpp:507
#6  0x00007fa5ad204025 in  () at /usr/lib/libQt5Qml.so.5
#7  0x00007fa5a9e82748 in QThreadPrivate::start(void*) (arg=0x5dc4ad0) at thread/qthread_unix.cpp:368
#8  0x00007fa5a8f8f454 in start_thread () at /usr/lib/libpthread.so.0
#9  0x00007fa5a97957df in clone () at /usr/lib/libc.so.6

Thread 8 (Thread 0x7fa4da53d700 (LWP 2616)):
#0  0x00007fa5b001d878 in __tls_get_addr () at /lib64/ld-linux-x86-64.so.2
#1  0x00007fa5a9e815d6 in get_thread_data () at thread/qthread_unix.cpp:189
#2  0x00007fa5a9e815d6 in QThreadData::current(bool) (createIfNecessary=createIfNecessary@entry=true) at thread/qthread_unix.cpp:244
#3  0x00007fa5aa0b1c2a in postEventSourcePrepare(GSource*, gint*) (s=0x7fa4d4003400, timeout=0x7fa4da53cbd4) at kernel/qeventdispatcher_glib.cpp:252
#4  0x00007fa5a2aeec89 in g_main_context_prepare () at /usr/lib/libglib-2.0.so.0
#5  0x00007fa5a2aef6ab in  () at /usr/lib/libglib-2.0.so.0
#6  0x00007fa5a2aef89c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#7  0x00007fa5aa0b24db in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fa4d40013d0, flags=...) at kernel/qeventdispatcher_glib.cpp:425
#8  0x00007fa5aa05bd0a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fa4da53cda0, flags=..., flags@entry=...) at kernel/qeventloop.cpp:212
#9  0x00007fa5a9e7dae3 in QThread::exec() (this=<optimized out>) at thread/qthread.cpp:507
#10 0x00007fa5ad204025 in  () at /usr/lib/libQt5Qml.so.5
#11 0x00007fa5a9e82748 in QThreadPrivate::start(void*) (arg=0x458cd60) at thread/qthread_unix.cpp:368
#12 0x00007fa5a8f8f454 in start_thread () at /usr/lib/libpthread.so.0
#13 0x00007fa5a97957df in clone () at /usr/lib/libc.so.6

Thread 7 (Thread 0x7fa4fb0e8700 (LWP 832)):
#0  0x00007fa5a2b34dd4 in g_mutex_unlock () at /usr/lib/libglib-2.0.so.0
#1  0x00007fa5a2aef73a in  () at /usr/lib/libglib-2.0.so.0
#2  0x00007fa5a2aef89c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#3  0x00007fa5aa0b24db in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fa4f40008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:425
#4  0x00007fa5aa05bd0a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fa4fb0e7d50, flags=..., flags@entry=...) at kernel/qeventloop.cpp:212
#5  0x00007fa5a9e7dae3 in QThread::exec() (this=<optimized out>) at thread/qthread.cpp:507
#6  0x00007fa5addb8fd6 in  () at /usr/lib/libQt5Quick.so.5
#7  0x00007fa5a9e82748 in QThreadPrivate::start(void*) (arg=0x192dd50) at thread/qthread_unix.cpp:368
#8  0x00007fa5a8f8f454 in start_thread () at /usr/lib/libpthread.so.0
#9  0x00007fa5a97957df in clone () at /usr/lib/libc.so.6

Thread 6 (Thread 0x7fa589b2b700 (LWP 831)):
#0  0x00007fa5a8f9510f in pthread_cond_wait@@GLIBC_2.3.2 () at /usr/lib/libpthread.so.0
#1  0x00007fa5af89e234 in  () at /usr/lib/libQt5Script.so.5
#2  0x00007fa5af89e279 in  () at /usr/lib/libQt5Script.so.5
#3  0x00007fa5a8f8f454 in start_thread () at /usr/lib/libpthread.so.0
#4  0x00007fa5a97957df in clone () at /usr/lib/libc.so.6

Thread 5 (Thread 0x7fa58b791700 (LWP 719)):
#0  0x00007fa5a2b34dd4 in g_mutex_unlock () at /usr/lib/libglib-2.0.so.0
#1  0x00007fa5a2aef171 in g_main_context_check () at /usr/lib/libglib-2.0.so.0
#2  0x00007fa5a2aef724 in  () at /usr/lib/libglib-2.0.so.0
#3  0x00007fa5a2aef89c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#4  0x00007fa5aa0b24db in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fa5800008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:425
#5  0x00007fa5aa05bd0a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fa58b790da0, flags=..., flags@entry=...) at kernel/qeventloop.cpp:212
#6  0x00007fa5a9e7dae3 in QThread::exec() (this=<optimized out>) at thread/qthread.cpp:507
#7  0x00007fa5ad204025 in  () at /usr/lib/libQt5Qml.so.5
#8  0x00007fa5a9e82748 in QThreadPrivate::start(void*) (arg=0x11e12d0) at thread/qthread_unix.cpp:368
#9  0x00007fa5a8f8f454 in start_thread () at /usr/lib/libpthread.so.0
#10 0x00007fa5a97957df in clone () at /usr/lib/libc.so.6

Thread 4 (Thread 0x7fa5919e0700 (LWP 707)):
#0  0x00007fa5a978c48d in poll () at /usr/lib/libc.so.6
#1  0x00007fa5a2aef786 in  () at /usr/lib/libglib-2.0.so.0
#2  0x00007fa5a2aef89c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#3  0x00007fa5aa0b24db in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fa5840008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:425
#4  0x00007fa5aa05bd0a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fa5919dfda0, flags=..., flags@entry=...) at kernel/qeventloop.cpp:212
#5  0x00007fa5a9e7dae3 in QThread::exec() (this=<optimized out>) at thread/qthread.cpp:507
#6  0x00007fa5ad204025 in  () at /usr/lib/libQt5Qml.so.5
#7  0x00007fa5a9e82748 in QThreadPrivate::start(void*) (arg=0x1148350) at thread/qthread_unix.cpp:368
#8  0x00007fa5a8f8f454 in start_thread () at /usr/lib/libpthread.so.0
#9  0x00007fa5a97957df in clone () at /usr/lib/libc.so.6

Thread 3 (Thread 0x7fa593428700 (LWP 672)):
#0  0x00007fa5a2b34db9 in g_mutex_lock () at /usr/lib/libglib-2.0.so.0
#1  0x00007fa5a2aef680 in  () at /usr/lib/libglib-2.0.so.0
#2  0x00007fa5a2aef89c in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#3  0x00007fa5aa0b24db in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7fa58c0008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:425
#4  0x00007fa5aa05bd0a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=this@entry=0x7fa593427d90, flags=..., flags@entry=...) at kernel/qeventloop.cpp:212
#5  0x00007fa5a9e7dae3 in QThread::exec() (this=this@entry=0x7fa5aae78d60 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at thread/qthread.cpp:507
#6  0x00007fa5aac04835 in QDBusConnectionManager::run() (this=0x7fa5aae78d60 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at qdbusconnection.cpp:170
#7  0x00007fa5a9e82748 in QThreadPrivate::start(void*) (arg=0x7fa5aae78d60 <(anonymous namespace)::Q_QGS__q_manager::innerFunction()::holder>) at thread/qthread_unix.cpp:368
#8  0x00007fa5a8f8f454 in start_thread () at /usr/lib/libpthread.so.0
#9  0x00007fa5a97957df in clone () at /usr/lib/libc.so.6

Thread 2 (Thread 0x7fa599185700 (LWP 659)):
#0  0x00007fa5a978c48d in poll () at /usr/lib/libc.so.6
#1  0x00007fa5ae7c48e0 in  () at /usr/lib/libxcb.so.1
#2  0x00007fa5ae7c6679 in xcb_wait_for_event () at /usr/lib/libxcb.so.1
#3  0x00007fa59b2d39f9 in QXcbEventReader::run() (this=0x10ae1f0) at qxcbconnection.cpp:1345
#4  0x00007fa5a9e82748 in QThreadPrivate::start(void*) (arg=0x10ae1f0) at thread/qthread_unix.cpp:368
#5  0x00007fa5a8f8f454 in start_thread () at /usr/lib/libpthread.so.0
#6  0x00007fa5a97957df in clone () at /usr/lib/libc.so.6

Thread 1 (Thread 0x7fa5b011b800 (LWP 642)):
[KCrash Handler]
#6  0x00007fa5a96e004f in raise () at /usr/lib/libc.so.6
#7  0x00007fa5a96e147a in abort () at /usr/lib/libc.so.6
#8  0x00007fa59ce1a9f5 in pa_context_set_default_source () at /usr/lib/libpulse.so.0
#9  0x00007fa4f072e99e in QPulseAudio::Context::setDefaultSource(QString const&) () at /usr/lib/libQPulseAudioPrivate.so
#10 0x00007fa4f074b40d in QPulseAudio::Server::setDefaultSource(QPulseAudio::Source*) () at /usr/lib/libQPulseAudioPrivate.so
#11 0x00007fa4f074ecb9 in  () at /usr/lib/libQPulseAudioPrivate.so
#12 0x00007fa4f075124f in QPulseAudio::Device::qt_metacall(QMetaObject::Call, int, void**) () at /usr/lib/libQPulseAudioPrivate.so
#13 0x00007fa5aa06b9a7 in QMetaProperty::write(QObject*, QVariant const&) const (this=<optimized out>, object=0x43dac70, value=...) at kernel/qmetaobject.cpp:3126
#14 0x00007fa4f0739050 in QPulseAudio::AbstractModel::setData(QModelIndex const&, QVariant const&, int) () at /usr/lib/libQPulseAudioPrivate.so
#15 0x00007fa5acfc140f in  () at /usr/lib/libQt5Qml.so.5
#16 0x00007fa5ad177ac9 in  () at /usr/lib/libQt5Qml.so.5
#17 0x00007fa5ad176ac4 in QQmlPropertyPrivate::write(QObject*, QQmlPropertyData const&, QVariant const&, QQmlContextData*, QFlags<QQmlPropertyData::WriteFlag>) () at /usr/lib/libQt5Qml.so.5
#18 0x00007fa5ad140b7b in QV4::QObjectWrapper::setProperty(QV4::ExecutionEngine*, QObject*, QQmlPropertyData*, QV4::Value const&) () at /usr/lib/libQt5Qml.so.5
#19 0x00007fa5ad141390 in QV4::QObjectWrapper::setQmlProperty(QV4::ExecutionEngine*, QQmlContextData*, QObject*, QV4::String*, QV4::QObjectWrapper::RevisionMode, QV4::Value const&) () at /usr/lib/libQt5Qml.so.5
#20 0x00007fa5ad1f11ac in QV4::QmlContextWrapper::put(QV4::Managed*, QV4::String*, QV4::Value const&) () at /usr/lib/libQt5Qml.so.5
#21 0x00007fa5ad0c2366 in QV4::ExecutionContext::setProperty(QV4::String*, QV4::Value const&) () at /usr/lib/libQt5Qml.so.5
#22 0x00007fa5ad1527c7 in QV4::Runtime::method_setActivationProperty(QV4::ExecutionEngine*, int, QV4::Value const&) () at /usr/lib/libQt5Qml.so.5
#23 0x00007fa4d1a6462d in  ()
#24 0x0000000005dc7230 in  ()
#25 0x0000000000000000 in  ()

Reported using DrKonqi
Comment 1 David Rosca 2017-02-02 13:26:43 UTC
Git commit 1c1a76775cb566b30aa412761494116570e7c49d by David Rosca.
Committed on 02/02/2017 at 13:25.
Pushed by drosca into branch 'Plasma/5.8'.

Always check if context is valid when calling pa functions

If pa_context is null, pulseaudio aborts.
FIXED-IN: 5.8.6

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

M  +12   -0    src/context.cpp
M  +12   -0    src/context.h

https://commits.kde.org/plasma-pa/1c1a76775cb566b30aa412761494116570e7c49d