Bug 331114 - muon-updater never works, always need to kill qaptworker
Summary: muon-updater never works, always need to kill qaptworker
Status: RESOLVED NOT A BUG
Alias: None
Product: Discover
Classification: Applications
Component: Updates (interactive) (show other bugs)
Version: unspecified
Platform: unspecified Linux
: NOR normal
Target Milestone: ---
Assignee: Jonathan Thomas
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-02-13 18:11 UTC by Rohan Garg
Modified: 2016-03-02 13:31 UTC (History)
4 users (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 Rohan Garg 2014-02-13 18:11:41 UTC
I successfully get tray notifications. when I click the tray icon muon appears. then I click the first button which should translate to something like 'install udpates'. after clicking that button the muon window immediately gets greyed out and never returns. I always kill the application and afterwards I have to kill the qaptworker process as root so I can install the updates with aptitude or apt-get.

Downstream bug : https://bugs.launchpad.net/ubuntu/+source/muon/+bug/1082484

Reproducible: Always
Comment 1 Harald Sitter 2014-02-14 11:10:00 UTC
Please run the following commands in a terminal when everything is stuck, at the end these commands should print the name of a file that you can attach to this bug report. After that you can kill qaptworker and muon-updater.

d=bug331114
rm -rf $d*
mkdir $d
cd $d
sudo gcore `pidof qaptworker2` && sudo chown $USER:$USER core.`pidof qaptworker2`
sudo gcore `pidof muon-updater` && sudo chown $USER:$USER core.`pidof muon-updater`
cp -r /var/log/apt .
cp -r /var/log/dpkg* .
cp -r /etc/apt etc-apt
f=log
touch $f
echo "___dpkg-query___" >> $f
dpkg-query -W --showformat='${binary:Package};${Version};${Status}\n' | grep -v deinstall >> $f
echo "__dump__" >> $f
apt-cache dump >> $f
cd ..
tar -cf $d.tar $d
xz -9 $d.tar
rm -rf $d
echo "`pwd`/$d.tar.xz"
Comment 2 Jürgen Richtsfeld 2014-04-24 19:39:52 UTC
I cannot attach the file because of it's size but you can download it from http://81.10.192.84/~juergen/bug331114.tar.xz
Comment 3 Harald Sitter 2014-04-28 11:05:20 UTC
Thanks. 

It appears to me that something is breaking your system in very exciting ways.

The muon-updater core shows this:

#3  0x00007f8e16e80c92 in QEventDispatcherUNIX::processEvents (this=0x7f8e000008f0, flags=...) at kernel/qeventdispatcher_unix.cpp:936

There are two different eventloop dispatchers available for Qt on Linux, one is the lowlevel unix dispatcher as seen above and the other is a glib based on (which is the recommended and preferred one and partially actually required one).

Now there's only very few ways to force the unix dispatcher to be used. One of them is setting an environment variable, which according to the data you provided is set for your muon-updater

> (gdb) x/s *((char **)environ+40)
> 0x7fff1a054cf0: "QT_NO_GLIB=1"

This is why your updater has a unix dispatcher even though it should have a glib one. Now, assuming you did not set this explicitly when starting muon-updater this is set globally for your envrionment. Having it in the environment is reaaaally bad to begin with but ultimately explains why your muon-updater gets locked.

What is supposed to happen is:
- updater tells qaptworker to conduct an upgrade with the selected packages
- qaptworker needs authentication of the user to do that
- qaptworker tells polkit (the helper system for authentication) to ask the user for authentication
- a dialog pops up, you enter your password and everything is lovely

BUT

polkit is using glib and requires a glib eventloop, but since QT_NO_GLIB=1 is set globally your polkit helper has no glib eventloop and therefore can not do anything. In fact if I am not mistaken it cannot even respond to the authentication request at all which is why qaptworker2 waits forever and that is why muon-updater also waits forever.

Find the source of QT_NO_GLIB, remove it and everything should work as expected again. I suspect that a `grep -r QT_NO_GLIB /etc $HOME` will probably yield the origin of this envrionment variable.

There is very little we can do about this on our side unfortunately, I filed bug #334009 which should make it more obvious when a user setting is breaking something.
Comment 4 Harald Sitter 2014-04-28 11:09:01 UTC
for the record: the backtrace of qaptworker2

Thread 3 (Thread 0x7f62296178c0 (LWP 17298)):
#0  0x00007f6227d30fbd in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f6227348fe4 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f622734930a in g_main_loop_run () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f62269cadca in polkit_authority_check_authorization_sync () from /usr/lib/x86_64-linux-gnu/libpolkit-gobject-1.so.0
#4  0x00007f6228d3c0a4 in PolkitQt1::Authority::checkAuthorizationSync(QString const&, PolkitQt1::Subject const&, QFlags<PolkitQt1::Authority::AuthorizationFlag>) () from /usr/lib/libpolkit-qt-core-1.so.1
#5  0x000000000040e16c in authorize (service=..., action=...) at /build/buildd/libqapt-2.1.70/src/worker/qaptauthorization.h:35
#6  Transaction::authorizeRun (this=this@entry=0x11687c0) at /build/buildd/libqapt-2.1.70/src/worker/transaction.cpp:522
#7  0x000000000040e280 in Transaction::run (this=0x11687c0) at /build/buildd/libqapt-2.1.70/src/worker/transaction.cpp:489
#8  0x0000000000415c6d in Transaction::qt_static_metacall (_o=0x11687c0, _id=1, _a=0xffffffff, _c=<optimized out>)
    at /build/buildd/libqapt-2.1.70/obj-x86_64-linux-gnu/src/worker/moc_transaction.cpp:117
#9  0x00007f62290ce908 in QMetaMethod::invoke (this=this@entry=0x7ffffdb612b0, object=object@entry=0x11687c0, 
    connectionType=Qt::DirectConnection, connectionType@entry=Qt::AutoConnection, returnValue=..., val0=..., val1=..., val2=..., val3=..., 
    val4=..., val5=..., val6=..., val7=..., val8=..., val9=...) at kernel/qmetaobject.cpp:1664
#10 0x00007f62290d0dc2 in QMetaObject::invokeMethod (obj=0x11687c0, member=member@entry=0x417321 "run", type=type@entry=Qt::AutoConnection, 
    ret=..., val0=..., val1=..., val2=..., val3=..., val4=..., val5=..., val6=..., val7=..., val8=..., val9=...)
    at kernel/qmetaobject.cpp:1179
#11 0x00000000004114ef in invokeMethod (val9=..., val8=..., val7=..., val6=..., val5=..., val4=..., val3=..., val2=..., val1=..., val0=..., 
    member=0x417321 "run", obj=<optimized out>) at /usr/include/qt4/QtCore/qobjectdefs.h:434
#12 TransactionAdaptor::run (this=<optimized out>) at /build/buildd/libqapt-2.1.70/src/worker/transactionadapter.cpp:195
#13 0x00000000004158c5 in TransactionAdaptor::qt_static_metacall (_o=_o@entry=0x11683a0, _id=_id@entry=9, _a=_a@entry=0x7ffffdb61810, 
    _c=QMetaObject::InvokeMetaMethod) at /build/buildd/libqapt-2.1.70/obj-x86_64-linux-gnu/src/worker/moc_transactionadapter.cpp:166
#14 0x00000000004164b3 in qt_static_metacall (_a=0x7ffffdb61810, _id=9, _c=QMetaObject::InvokeMetaMethod, _o=0x11683a0)
    at /build/buildd/libqapt-2.1.70/obj-x86_64-linux-gnu/src/worker/moc_transactionadapter.cpp:206
#15 TransactionAdaptor::qt_metacall (this=0x11683a0, _c=QMetaObject::InvokeMetaMethod, _id=9, _a=0x7ffffdb61810)
    at /build/buildd/libqapt-2.1.70/obj-x86_64-linux-gnu/src/worker/moc_transactionadapter.cpp:207
#16 0x00007f622867b1f6 in QDBusConnectionPrivate::deliverCall (this=this@entry=0x1160d70, object=object@entry=0x11683a0, msg=..., 
    metaTypes=..., slotIdx=13) at qdbusintegrator.cpp:951
#17 0x00007f622867c2f9 in QDBusConnectionPrivate::activateCall (this=this@entry=0x1160d70, object=0x11683a0, flags=flags@entry=273, msg=...)
    at qdbusintegrator.cpp:856
#18 0x00007f622867cddd in QDBusConnectionPrivate::activateObject (this=0x1160d70, node=..., msg=..., pathStartPos=<optimized out>)
    at qdbusintegrator.cpp:1427
#19 0x00007f622867ceab in QDBusActivateObjectEvent::placeMetaCall (this=0x116a6e0) at qdbusintegrator.cpp:1541
#20 0x00007f62290dec1e in QObject::event (this=0x11687c0, e=<optimized out>) at kernel/qobject.cpp:1194
#21 0x00007f62290c64dd in QCoreApplication::notifyInternal (this=0x7ffffdb61ec0, receiver=receiver@entry=0x11687c0, 
    event=event@entry=0x116a6e0) at kernel/qcoreapplication.cpp:953
#22 0x00007f62290c9b3d in sendEvent (event=0x116a6e0, receiver=0x11687c0)
    at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:231
#23 QCoreApplicationPrivate::sendPostedEvents (receiver=receiver@entry=0x0, event_type=event_type@entry=0, data=0x1148df0)
    at kernel/qcoreapplication.cpp:1577
#24 0x00007f62290c9fe3 in QCoreApplication::sendPostedEvents (receiver=receiver@entry=0x0, event_type=event_type@entry=0)
    at kernel/qcoreapplication.cpp:1470
#25 0x00007f62290f3f83 in sendPostedEvents () at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:236
#26 postEventSourceDispatch (s=0x114a800) at kernel/qeventdispatcher_glib.cpp:287
#27 0x00007f6227348e04 in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#28 0x00007f6227349048 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#29 0x00007f62273490ec in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#30 0x00007f62290f37a1 in QEventDispatcherGlib::processEvents (this=0x1149480, flags=...) at kernel/qeventdispatcher_glib.cpp:434
#31 0x00007f62290c50af in QEventLoop::processEvents (this=this@entry=0x7ffffdb61e70, flags=...) at kernel/qeventloop.cpp:149
#32 0x00007f62290c53a5 in QEventLoop::exec (this=this@entry=0x7ffffdb61e70, flags=...) at kernel/qeventloop.cpp:204
#33 0x00007f62290cab79 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1225
#34 0x0000000000406e50 in main (argc=1, argv=<optimized out>) at /build/buildd/libqapt-2.1.70/src/worker/main.cpp:27

Thread 2 (Thread 0x7f6221672700 (LWP 17300)):
#0  0x00007f6227d30fbd in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f6227348fe4 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f622734930a in g_main_loop_run () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f62264d3e16 in ?? () from /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#4  0x00007f622736df15 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#5  0x00007f6227a2d182 in start_thread (arg=0x7f6221672700) at pthread_create.c:312
#6  0x00007f6227d3e30d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 1 (Thread 0x7f6221e73700 (LWP 17299)):
#0  0x00007f6227d30fbd in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f6227348fe4 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f62273490ec in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f62290f37be in QEventDispatcherGlib::processEvents (this=0x7f621c0008c0, flags=...) at kernel/qeventdispatcher_glib.cpp:436
#4  0x00007f62290c50af in QEventLoop::processEvents (this=this@entry=0x7f6221e72d20, flags=...) at kernel/qeventloop.cpp:149
#5  0x00007f62290c53a5 in QEventLoop::exec (this=this@entry=0x7f6221e72d20, flags=...) at kernel/qeventloop.cpp:204
#6  0x00007f6228fc1c5f in QThread::exec (this=<optimized out>) at thread/qthread.cpp:537
#7  0x00007f6228fc432f in QThreadPrivate::start (arg=0x115d240) at thread/qthread_unix.cpp:349
#8  0x00007f6227a2d182 in start_thread (arg=0x7f6221e73700) at pthread_create.c:312
#9  0x00007f6227d3e30d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
Comment 5 Harald Sitter 2014-04-28 11:09:38 UTC
and the backtrace of muon-updater


Thread 4 (Thread 0x7f8e190967c0 (LWP 17265)):
#0  0x00007f8e166fbc33 in select () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f8e16e7b1c7 in qt_safe_select (nfds=105, fdread=0x1e4a468, fdwrite=0x1e4a700, fdexcept=0x1e4a998, orig_timeout=0x7fff1a053780) at kernel/qcore_unix.cpp:89
#2  0x00007f8e16e80824 in QEventDispatcherUNIXPrivate::doSelect (this=this@entry=0x1e4a2b0, flags=..., timeout=0x7fff1a053780) at kernel/qeventdispatcher_unix.cpp:223
#3  0x00007f8e16e80c92 in QEventDispatcherUNIX::processEvents (this=this@entry=0x1e12900, flags=...) at kernel/qeventdispatcher_unix.cpp:936
#4  0x00007f8e178e54d6 in QEventDispatcherX11::processEvents (this=0x1e12900, flags=...) at kernel/qeventdispatcher_x11.cpp:152
#5  0x00007f8e16e4f0af in QEventLoop::processEvents (this=this@entry=0x7fff1a053a50, flags=...) at kernel/qeventloop.cpp:149
#6  0x00007f8e16e4f3a5 in QEventLoop::exec (this=this@entry=0x7fff1a053a50, flags=...) at kernel/qeventloop.cpp:204
#7  0x00007f8e16e54b79 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1225
#8  0x00007f8e1784137c in QApplication::exec () at kernel/qapplication.cpp:3828
#9  0x000000000040ce11 in main (argc=1, argv=0x7fff1a053c88) at /build/buildd/muon-2.2.0/updater/main.cpp:57

Thread 3 (Thread 0x7f8df510e700 (LWP 17295)):
#0  0x00007f8e166fbc33 in select () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f8e16e7b2c7 in qt_safe_select (nfds=107, fdread=0x7f8de8000ac8, fdwrite=0x7f8de8000d60, fdexcept=0x7f8de8000ff8, orig_timeout=0x0) at kernel/qcore_unix.cpp:79
#2  0x00007f8e16e80824 in QEventDispatcherUNIXPrivate::doSelect (this=this@entry=0x7f8de8000910, flags=..., timeout=0x0) at kernel/qeventdispatcher_unix.cpp:223
#3  0x00007f8e16e80c92 in QEventDispatcherUNIX::processEvents (this=0x7f8de80008f0, flags=...) at kernel/qeventdispatcher_unix.cpp:936
#4  0x00007f8e16e4f0af in QEventLoop::processEvents (this=this@entry=0x7f8df510dde0, flags=...) at kernel/qeventloop.cpp:149
#5  0x00007f8e16e4f3a5 in QEventLoop::exec (this=this@entry=0x7f8df510dde0, flags=...) at kernel/qeventloop.cpp:204
#6  0x00007f8e16d4bc5f in QThread::exec (this=this@entry=0x3428ef0) at thread/qthread.cpp:537
#7  0x00007f8e16e30823 in QInotifyFileSystemWatcherEngine::run (this=0x3428ef0) at io/qfilesystemwatcher_inotify.cpp:265
#8  0x00007f8e16d4e32f in QThreadPrivate::start (arg=0x3428ef0) at thread/qthread_unix.cpp:349
#9  0x00007f8e13aa3182 in start_thread (arg=0x7f8df510e700) at pthread_create.c:312
#10 0x00007f8e1670430d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 2 (Thread 0x7f8dfffff700 (LWP 17267)):
#0  0x00007f8e166fbc33 in select () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f8e16e2d171 in QProcessManager::run (this=0x7f8e171b7540 <processManager()::processManager>) at io/qprocess_unix.cpp:270
#2  0x00007f8e16d4e32f in QThreadPrivate::start (arg=0x7f8e171b7540 <processManager()::processManager>) at thread/qthread_unix.cpp:349
#3  0x00007f8e13aa3182 in start_thread (arg=0x7f8dfffff700) at pthread_create.c:312
#4  0x00007f8e1670430d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 1 (Thread 0x7f8e05672700 (LWP 17266)):
#0  0x00007f8e166fbc33 in select () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007f8e16e7b2c7 in qt_safe_select (nfds=14, fdread=0x7f8e00000ac8, fdwrite=0x7f8e00000d60, fdexcept=0x7f8e00000ff8, orig_timeout=0x0) at kernel/qcore_unix.cpp:79
#2  0x00007f8e16e80824 in QEventDispatcherUNIXPrivate::doSelect (this=this@entry=0x7f8e00000910, flags=..., timeout=0x0) at kernel/qeventdispatcher_unix.cpp:223
#3  0x00007f8e16e80c92 in QEventDispatcherUNIX::processEvents (this=0x7f8e000008f0, flags=...) at kernel/qeventdispatcher_unix.cpp:936
#4  0x00007f8e16e4f0af in QEventLoop::processEvents (this=this@entry=0x7f8e05671de0, flags=...) at kernel/qeventloop.cpp:149
#5  0x00007f8e16e4f3a5 in QEventLoop::exec (this=this@entry=0x7f8e05671de0, flags=...) at kernel/qeventloop.cpp:204
#6  0x00007f8e16d4bc5f in QThread::exec (this=this@entry=0x225d9d0) at thread/qthread.cpp:537
#7  0x00007f8e16e30823 in QInotifyFileSystemWatcherEngine::run (this=0x225d9d0) at io/qfilesystemwatcher_inotify.cpp:265
#8  0x00007f8e16d4e32f in QThreadPrivate::start (arg=0x225d9d0) at thread/qthread_unix.cpp:349
#9  0x00007f8e13aa3182 in start_thread (arg=0x7f8e05672700) at pthread_create.c:312
#10 0x00007f8e1670430d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111
Comment 6 Jürgen Richtsfeld 2014-04-28 19:03:35 UTC
Hi, thanks a lot for your investigation. It seems I created a script named ns_pluginfix.sh in .kde/env somewhen in 2009!!! (which I really didn't remember anymore) removing that script immediately fixed the issue - thanks a lot for your effort.