Bug 220403 - Double click "Kill process" on same program [KAuth::BackendsManager::init, KAuth::BackendsManager::authBackend, KAuth::Action::Action]
Summary: Double click "Kill process" on same program [KAuth::BackendsManager::init, KA...
Status: RESOLVED FIXED
Alias: None
Product: ksysguard
Classification: Applications
Component: Process Controller - krunner part (show other bugs)
Version: unspecified
Platform: Mandriva RPMs Linux
: NOR crash
Target Milestone: ---
Assignee: Dario Freddi
URL:
Keywords:
: 221268 221937 222419 222879 224460 (view as bug list)
Depends on:
Blocks:
 
Reported: 2009-12-28 15:24 UTC by Carth Onasi
Modified: 2011-03-18 16:15 UTC (History)
10 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 Carth Onasi 2009-12-28 15:24:38 UTC
Application: krunner (0.1)
KDE Platform Version: 4.3.85 (KDE 4.3.85 (KDE 4.4 Beta2))
Qt Version: 4.6.0
Operating System: Linux 2.6.32.2-desktop-2mnb x86_64
Distribution: "Mandriva Linux 2010.0"

-- Information about the crash:
Start some program (I choose KWrite). Press CTRL+ESC and find this process. Button "Kill process..." will change color to active, but it not click-able for a moment.
Press this button and until this process disappear, press it again on same process -> Krunner crash.

The crash can be reproduced everytime.

 -- Backtrace:
Application: Rozhraní pro spouštění programů (kdeinit4), signal: Aborted
82	T_PSEUDO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS)
The current source language is "auto; currently asm".
[Current thread is 1 (Thread 0x7effc1089720 (LWP 12123))]

Thread 2 (Thread 0x7effa1c5b710 (LWP 12125)):
#0  0x00007effbf32d0bc in pthread_cond_wait@@GLIBC_2.3.2 () from /lib64/libpthread.so.0
#1  0x00007effbf5b21db in wait (time=<value optimized out>, this=<value optimized out>) at thread/qwaitcondition_unix.cpp:87
#2  QWaitCondition::wait (time=<value optimized out>, this=<value optimized out>) at thread/qwaitcondition_unix.cpp:159
#3  0x00007effbdd8f8bc in QHostInfoAgent::run (this=0xe09920) at kernel/qhostinfo.cpp:252
#4  0x00007effbf5b1225 in QThreadPrivate::start (arg=0xe09920) at thread/qthread_unix.cpp:244
#5  0x00007effbf328a5d in start_thread () from /lib64/libpthread.so.0
#6  0x00007effbe10b0dd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#7  0x0000000000000000 in ?? ()

Thread 1 (Thread 0x7effc1089720 (LWP 12123)):
[KCrash Handler]
#5  0x00007effbe061955 in raise (sig=<value optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#6  0x00007effbe062f70 in abort () at abort.c:92
#7  0x00007effbf5a9354 in qt_message_output (msgType=QtFatalMsg, buf=<value optimized out>) at global/qglobal.cpp:2226
#8  0x00007effbf5a9532 in qt_message(QtMsgType, const char *, typedef __va_list_tag __va_list_tag *) (msgType=QtFatalMsg, msg=0x7effbf705838 "ASSERT failure in %s: \"%s\", file %s, line %d", ap=
    0x7fffe6a08800) at global/qglobal.cpp:2272
#9  0x00007effbf5a96e5 in qFatal (msg=0x2f5b <Address 0x2f5b out of bounds>) at global/qglobal.cpp:2455
#10 0x00007effc0b2a52c in KAuth::BackendsManager::init () at /usr/src/debug/kdelibs-4.3.85/kdecore/auth/BackendsManager.cpp:52
#11 0x00007effc0b2a905 in KAuth::BackendsManager::authBackend () at /usr/src/debug/kdelibs-4.3.85/kdecore/auth/BackendsManager.cpp:59
#12 0x00007effc0b2bd71 in KAuth::Action::Action (this=0x107fe80, name=...) at /usr/src/debug/kdelibs-4.3.85/kdecore/auth/kauthaction.cpp:62
#13 0x00007effb26d609e in KSysGuardProcessList::killProcesses (this=0xdb49e0, pids=<value optimized out>, sig=15)
    at /usr/src/debug/kdebase-workspace-4.3.85/libs/ksysguard/processui/ksysguardprocesslist.cpp:1205
#14 0x00007effb26d69dd in KSysGuardProcessList::killSelectedProcesses (this=0xdb49e0) at /usr/src/debug/kdebase-workspace-4.3.85/libs/ksysguard/processui/ksysguardprocesslist.cpp:1263
#15 0x00007effb26d8751 in KSysGuardProcessList::qt_metacall (this=0xdb49e0, _c=InvokeMetaMethod, _id=<value optimized out>, _a=0x7fffe6a08e70)
    at /usr/src/debug/kdebase-workspace-4.3.85/build/libs/ksysguard/processui/ksysguardprocesslist.moc:154
#16 0x00007effbf6b71b3 in QMetaObject::activate (sender=0xe81470, m=<value optimized out>, local_signal_index=<value optimized out>, argv=0xffffffffffffffff) at kernel/qobject.cpp:3286
#17 0x00007effbeee5ca2 in QAbstractButton::clicked (this=0x2f5b, _t1=false) at .moc/release-shared/moc_qabstractbutton.cpp:206
#18 0x00007effbec0368b in QAbstractButtonPrivate::emitClicked (this=0xe814b0) at widgets/qabstractbutton.cpp:546
#19 0x00007effbec0454b in QAbstractButtonPrivate::click (this=0xe814b0) at widgets/qabstractbutton.cpp:539
#20 0x00007effbec047b5 in QAbstractButton::mouseReleaseEvent (this=0xe81470, e=0x7fffe6a09740) at widgets/qabstractbutton.cpp:1118
#21 0x00007effbe8a8b19 in QWidget::event (this=0xe81470, event=0x7fffe6a09740) at kernel/qwidget.cpp:7974
#22 0x00007effbe85342c in QApplicationPrivate::notify_helper (this=0x98d260, receiver=0xe81470, e=0x7fffe6a09740) at kernel/qapplication.cpp:4242
#23 0x00007effbe85a2b1 in QApplication::notify (this=0x98cec0, receiver=0xe81470, e=0x7fffe6a09740) at kernel/qapplication.cpp:3822
#24 0x00007effbfbd84ae in KApplication::notify (this=0x98cec0, receiver=0xe81470, event=0x7fffe6a09740) at /usr/src/debug/kdelibs-4.3.85/kdeui/kernel/kapplication.cpp:302
#25 0x00007effbf6a445c in QCoreApplication::notifyInternal (this=0x98cec0, receiver=0xe81470, event=0x7fffe6a09740) at kernel/qcoreapplication.cpp:704
#26 0x00007effbe859426 in sendEvent (event=<value optimized out>, receiver=<value optimized out>) at ../../src/corelib/kernel/qcoreapplication.h:215
#27 QApplicationPrivate::sendMouseEvent (event=<value optimized out>, receiver=<value optimized out>) at kernel/qapplication.cpp:2956
#28 0x00007effbe8d7605 in QETWidget::translateMouseEvent (this=0xdb49b0, event=<value optimized out>) at kernel/qapplication_x11.cpp:4368
#29 0x00007effbe8d631a in QApplication::x11ProcessEvent (this=<value optimized out>, event=0x7fffe6a0a060) at kernel/qapplication_x11.cpp:3501
#30 0x00007effbe900aa2 in x11EventSourceDispatch (s=0x990af0, callback=<value optimized out>, user_data=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:146
#31 0x00007effbaafd65e in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
#32 0x00007effbab01028 in ?? () from /usr/lib64/libglib-2.0.so.0
#33 0x00007effbab01150 in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#34 0x00007effbf6cda13 in QEventDispatcherGlib::processEvents (this=0x98b740, flags=<value optimized out>) at kernel/qeventdispatcher_glib.cpp:407
#35 0x00007effbe90068e in QGuiEventDispatcherGlib::processEvents (this=0x2f5b, flags=<value optimized out>) at kernel/qguieventdispatcher_glib.cpp:202
#36 0x00007effbf6a2d82 in QEventLoop::processEvents (this=<value optimized out>, flags=) at kernel/qeventloop.cpp:149
#37 0x00007effbf6a315c in QEventLoop::exec (this=0x7fffe6a0a390, flags=) at kernel/qeventloop.cpp:201
#38 0x00007effbf6a6e9b in QCoreApplication::exec () at kernel/qcoreapplication.cpp:981
#39 0x00007effb2bc7044 in kdemain (argc=<value optimized out>, argv=<value optimized out>) at /usr/src/debug/kdebase-workspace-4.3.85/krunner/main.cpp:65
#40 0x0000000000406e99 in launch (argc=1, _name=<value optimized out>, args=<value optimized out>, cwd=<value optimized out>, envc=<value optimized out>, envs=<value optimized out>, reset_env=false, 
    tty=0x0, avoid_loops=false, startup_id_str=0x409dd6 "0") at /usr/src/debug/kdelibs-4.3.85/kinit/kinit.cpp:705
#41 0x0000000000407608 in handle_launcher_request (sock=7, who=<value optimized out>) at /usr/src/debug/kdelibs-4.3.85/kinit/kinit.cpp:1197
#42 0x0000000000408281 in handle_requests (waitForPid=0) at /usr/src/debug/kdelibs-4.3.85/kinit/kinit.cpp:1390
#43 0x0000000000408ab0 in main (argc=2, argv=<value optimized out>, envp=<value optimized out>) at /usr/src/debug/kdelibs-4.3.85/kinit/kinit.cpp:1825

Reported using DrKonqi
Comment 1 John Tapsell 2009-12-29 06:20:07 UTC
I don't get a crash, but it does say that the authentication failed and pops up a dialog asking for my password.

Is this a bug for you drf?
Comment 2 Dario Freddi 2009-12-29 13:00:17 UTC
Please try using the latest polkit-qt release (as found on http://dot.kde.org/2009/12/25/kde-extends-polkit-support-polkit-1 ). Unfortunately on Qt 4.6 that release is needed to fix this kind of behavior (and in fact 4.4 trunk depends on it)
Comment 3 John Tapsell 2009-12-29 13:40:06 UTC
Carth (the reporter),
  Is it possible for you to upgrade to the latest polkit-qt and check for the bug again?
Comment 4 Carth Onasi 2009-12-29 14:18:34 UTC
I installed this RPM from Mandriva:

lib64polkit1_0-0.95-1mdv2010.1
polkit-gnome-0.95-1mdv2010.1
polkit-kde-1-debug-0.95.1-1mdv2010.1
polkit-qt-devel-0.9.3-1mdv2010.1
polkit-qt-debug-0.9.3-1mdv2010.1
lib64polkit-qt-agent-10-0.95.1-1mdv2010.1
polkit-kde-1-0.95.1-1mdv2010.1
lib64polkit-qt-core0-0.9.3-1mdv2010.1
polkit-qt-1-devel-0.95.1-1mdv2010.1
lib64polkit-qt-core-10-0.95.1-1mdv2010.1
lib64polkit-devel-0.9-6mdv2010.0
polkit-qt-1-debug-0.95.1-1mdv2010.1
polkit-debug-0.95-1mdv2010.1
lib64polkit-qt-gui0-0.9.3-1mdv2010.1
lib64polkitkdeprivate4-4.3.85-2mdv2010.1
lib64polkit1-devel-0.95-1mdv2010.1
lib64polkit2-0.9-6mdv2010.0
lib64polkit-qt-gui-10-0.95.1-1mdv2010.1
lib64polkit-gnome0-0.9.2-4mdv2010.0
polkit-0.95-1mdv2010.1

But KRunner is crashed again. May be this bug belongs to Mandriva.
Comment 5 Dario Freddi 2009-12-29 14:27:41 UTC
Now that I look again at your bug, yes, it's an upstream bug. This is not a crash, more than a forced quit due to a failed assert. The interested line is the following:

Q_ASSERT_X(auth, __FUNCTION__, "No AuthBackend found.");

Which, of course, should never happen. I suppose it's a packaging problem.
Comment 6 John Tapsell 2009-12-29 14:42:16 UTC
upstream is Mandriva?  What should they fix exactly?  I don't see how marking this as closed helps anything?
Comment 7 Dario Freddi 2009-12-29 15:07:12 UTC
John, it's a packaging bug. And it's unrelated to KSysGuard. I'm marking it as closed because I can't fix packaging mistakes.
Comment 8 John Tapsell 2009-12-29 15:56:19 UTC
I get that.  But what is the packaging bug?  Where is it?  It is a packaging bug with policy-qt?  With policy-kit?  With ksysguard?  How can it be fixed?
Comment 9 Dario Andres 2010-01-04 23:42:38 UTC
*** Bug 221268 has been marked as a duplicate of this bug. ***
Comment 10 John Tapsell 2010-01-05 02:12:39 UTC
Hum, so we still don't have an actual solution for this, right?  We think it's a packaging bug, but have no idea what package or how to fix?
Comment 11 Christoph Feck 2010-01-12 19:29:04 UTC
*** Bug 222419 has been marked as a duplicate of this bug. ***
Comment 12 Nicolas L. 2010-01-21 15:34:51 UTC
i don't see where is the packaging but here. i reproduce with kde 4.3.90 and with polkit qt isntalled.


what missing part could lead to this assert ?
Comment 13 John Tapsell 2010-01-22 02:24:30 UTC
Well if polkit-qt isn't installed then I think it will most definitely crash.

There's a Q_ASSERT to make it crash if no backends are found :-/
Comment 14 Nicolas L. 2010-01-22 09:02:30 UTC
yes but here it is installed and you can see in comment #4 that this is installed too.
Comment 15 Dario Freddi 2010-01-25 14:53:37 UTC
Let me add some more details:

1 - The problem is not in polkit-qt being installed or not but more in how kdelibs was compiled and/or packaged. kdelibs generates a static plugin for KAuth which in this case is missing: in fact the assertion means that the static plugin in question is not found

2 - Due to this, this is not a bug in KDE, and I really don't know how to solve this or what hints to give, unless I know how Mandriva packages his stuff. It actually makes me wonder how this could happen, since the buildsystem ALWAYS builds a backend, eventually falling back to the fake one, so there should be something wrong somewhere

I am closing this bug again, and please do not open it again unless there is evidence that the problem lies in KDE. However I will be happy to give out some help on Mandriva's tracker.

(I got wrong before, distributions are downstream, thanks ossi ^^)
Comment 16 John Tapsell 2010-01-25 15:27:43 UTC
> in fact the assertion means that the static plugin in question is not found

Is it possible for me to check if the plugin is found?  I don't want ksysguard and krunner crashing if the plugins aren't found - I'd rather just gracefully disable that functionality and give an error.

Are there any unit tests for kauth btw?  From the first bug report it sounded like it could be triggered by trying to kill two processes rapidly.  It would be good to add a unit test for calling kauth twice in a row, just to check for this.
Comment 17 Dario Freddi 2010-01-25 15:33:35 UTC
>Is it possible for me to check if the plugin is found?  I don't want ksysguard
and krunner crashing if the plugins aren't found - I'd rather just gracefully
disable that functionality and give an error.

No, because it's not a KService plugin. It is compiled inside kdelibs and it should be always present, unless you do some bad tricks

> Are there any unit tests for kauth btw?  From the first bug report it sounded
like it could be triggered by trying to kill two processes rapidly.  It would
be good to add a unit test for calling kauth twice in a row, just to check for
this.

I don't recall any unit test but the situation you explained is plain impossible, at least related to this bug, unless somebody initializes KAuth twice, which again is pretty much impossible. Also, the fact that this bug happens only on Mandriva is a proof that the problem lies there.
Comment 18 John Tapsell 2010-01-25 15:54:01 UTC
Could the function return false or something then instead, instead of crashing?
Comment 19 John Tapsell 2010-01-25 15:57:40 UTC
Could this bug be related:

https://bugs.kde.org/show_bug.cgi?id=224135

it's a segmentation fault instead, and it's with OpenSuse
Comment 20 Dario Freddi 2010-01-25 16:10:53 UTC
>Could the function return false or something then instead, instead of crashing?

No, it's an assert notifying a missing component hence it's a critical error that has to lead to a crash. Straight to the point, it should simply never happen.

>Could this bug be related:

Probably. Knowing what backend those systems are using and the cmake line of kdelibs would probably help figuring out.
Comment 21 Thomas Richard 2010-01-25 16:39:06 UTC
Hmm, 
https://bugs.kde.org/show_bug.cgi?id=222419

My bug report got marked as a duplicate of this bug. I'm op openSUSE though..
Comment 22 John Tapsell 2010-01-25 16:50:47 UTC
Could it be that this is the problem, in 

#ifndef KDE_USE_FINAL
Q_IMPORT_PLUGIN(auth_backend)
Q_IMPORT_PLUGIN(helper_proxy)
#endif

It sounds quite possible that Mandriva compiles with --use-final  to reduce
binary size, so these wouldn't happen.  Would bad things happen in such a case?
Comment 23 Will Stephenson 2010-01-25 16:54:42 UTC
It's -DCMAKE_BUILD_TYPE=release not --use-final, but yeah, openSUSE builds with that too.
Comment 24 John Tapsell 2010-01-25 16:57:21 UTC
Thiago says that what Q_IMPORT_PLUGIN does is that it adds the statically-compiled plugin to QPluginLoader's list.

So it would indeed return an empty list of instances.

Talking to montel and thiago, the long term fix is to remove the whole static plugin code.  kdelibs code really should not be doing this.

In the short term, adding KDE4_NO_ENABLE_FINAL(kauth)  to CMakeLists.txt  should fix it.
Comment 25 Dario Freddi 2010-01-25 17:01:49 UTC
Oh crap. I didn't commit that line and didn't realize that.

However, not so easy. The whole kdecore should actually be added to NO_FINAL, and I guess this is not acceptable. I can come up with something to avoid the need of having static plugins, still solid does that and it's in kdelibs.

However, I'm assigning this bug to myself and will try to remove the static plugins. If I come up with something acceptable I'll just commit straight away, otherwise we'll see.
Comment 26 Dario Freddi 2010-01-25 20:12:43 UTC
After some additional reasoning and looking at the code again, I await for the issue to be discussed on k-c-d, since the change does not make a lot of sense and other code in kdelibs simply relies on static plugins.
Comment 27 Nicolas L. 2010-01-25 20:25:41 UTC
to comment #22, yes we compile with enable final
Comment 28 Christoph Feck 2010-01-27 14:58:28 UTC
*** Bug 224460 has been marked as a duplicate of this bug. ***
Comment 29 Dario Freddi 2010-01-27 21:13:47 UTC
SVN commit 1081127 by dafre:

BUG: 220403

Switch KAuth backend probing to static code compilation without the use of Qt's static plugins. This has some nice side effects:

1. Compilation with KDE4_ENABLE_FINAL works again (see bug in question)
2. The asserts are no longer triggered (they're still there for beauty), since now an error at compile time would occur instead
3. The whole probing is slightly more reliable.

It all seems to work but I urge everyone to test since release is near.
I'm backporting this commit in minutes



 M  +11 -80    CMakeLists.txt  
 M  +0 -1      auth/AuthBackend.h  
 M  +29 -17    auth/BackendsManager.cpp  
 M  +87 -0     auth/ConfigureChecks.cmake  
 M  +0 -1      auth/HelperProxy.h  
 M  +3 -7      auth/backends/dbus/DBusHelperProxy.cpp  
 M  +1 -2      auth/backends/dbus/DBusHelperProxy.h  
 M  +0 -3      auth/backends/fake/FakeBackend.cpp  
 M  +0 -2      auth/backends/mac/AuthServicesBackend.cpp  
 M  +0 -3      auth/backends/policykit/PolicyKitBackend.cpp  
 M  +0 -2      auth/backends/polkit-1/Polkit1Backend.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1081127
Comment 30 Dario Freddi 2010-01-27 21:20:25 UTC
SVN commit 1081133 by dafre:

CCBUG: 220403

Backporting r1081127



 M  +11 -80    CMakeLists.txt  
 M  +0 -1      auth/AuthBackend.h  
 M  +29 -17    auth/BackendsManager.cpp  
 M  +87 -0     auth/ConfigureChecks.cmake  
 M  +0 -1      auth/HelperProxy.h  
 M  +3 -7      auth/backends/dbus/DBusHelperProxy.cpp  
 M  +1 -2      auth/backends/dbus/DBusHelperProxy.h  
 M  +0 -3      auth/backends/fake/FakeBackend.cpp  
 M  +0 -2      auth/backends/mac/AuthServicesBackend.cpp  
 M  +0 -3      auth/backends/policykit/PolicyKitBackend.cpp  
 M  +0 -2      auth/backends/polkit-1/Polkit1Backend.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1081133
Comment 31 Christoph Feck 2010-01-28 04:49:49 UTC
*** Bug 221937 has been marked as a duplicate of this bug. ***
Comment 32 John Tapsell 2011-03-18 16:15:40 UTC
*** Bug 222879 has been marked as a duplicate of this bug. ***