Don't block forever in ensureKdeinitRunning
ClosedPublic

Authored by jtamate on Jul 23 2018, 3:26 PM.

Details

Summary

Add more comments to the code.
Don't wait forever, if the lock is blocked for more than 30 seconds, write a warning and exit.

Test Plan

My wife has been suffering this block for several months while I was not there, and it never happened to me.
Finally, It just has happened to me: plasmashell, ktorrent, akregator and dolphin were totally blocked.
With the help of gdb, dolphin was stopped in ensureKdeinitRunning(), apparently in tryLock(), but it was really in lock().

Diff Detail

Repository
R271 KDBusAddons
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.
jtamate created this revision.Jul 23 2018, 3:26 PM
Restricted Application added a project: Frameworks. · View Herald TranscriptJul 23 2018, 3:26 PM
Restricted Application added a subscriber: kde-frameworks-devel. · View Herald Transcript
jtamate requested review of this revision.Jul 23 2018, 3:26 PM
jtamate retitled this revision from Don't block forever to ensureKdeinitRunning to Don't block forever in ensureKdeinitRunning.Jul 23 2018, 3:33 PM
jtamate edited the summary of this revision. (Show Details)
dfaure requested changes to this revision.Jul 23 2018, 4:20 PM

Strange, I never had that bug.

Note that you can use gdb to get a backtrace for a deadlock, no need for hotspot for that particular task. In fact, hotspot even misled you. tryLock() can't be the problem, it returns immediately ;) (default timeout 0)

I guess lock() -- which is the actual blocking method in this code -- is where everything got stuck. Unfortunately you didn't get a backtrace so we can't verify this until it happens again? :(

Maybe a stale lock file, but not detected as one by QLockFile, could lead to lock() blocking forever... A recursive call to that method would do that too, but I don't see how that could happen.

If you want to introduce some safety against locking forever, it's lock() that should be replaced with tryLock(long timeout). I would make it much more than 5s though, kdeinit startup can take much more than that (imagine a slow system, swapping already, kdeinit starts a number of other processes, and triggers config file migration with kconf_update, etc.).

This revision now requires changes to proceed.Jul 23 2018, 4:20 PM

I kept dolphin blocked, just in case.

The backtrace:

#0  0x00007f54c47c4c90 in __GI___nanosleep (requested_time=requested_time@entry=0x7ffdda996710, remaining=remaining@entry=0x7ffdda996710)
    at ../sysdeps/unix/sysv/linux/nanosleep.c:28
#1  0x00007f54be9b236d in qt_nanosleep(timespec) (amount=...) at kernel/qelapsedtimer_unix.cpp:195
#2  0x00007f54be8bc985 in QLockFile::tryLock(int) (this=<optimized out>, timeout=<optimized out>) at io/qlockfile.cpp:274
#3  0x00007f54c0a23afb in KDEInitInterface::ensureKdeinitRunning() () at /usr/lib64/libKF5DBusAddons.so.5
#4  0x00007f54c2d16ffb in  () at /usr/lib64/libKF5KIOCore.so.5
#5  0x00007f54c2d17e7a in KIO::Slave::createSlave(QString const&, QUrl const&, int&, QString&) () at /usr/lib64/libKF5KIOCore.so.5
#6  0x00007f54c2d4c715 in  () at /usr/lib64/libKF5KIOCore.so.5
#7  0x00007f54c2d52fbc in  () at /usr/lib64/libKF5KIOCore.so.5
#8  0x00007f54be98ba53 in QMetaObject::activate(QObject*, int, int, void**) (sender=0x557a8ecc2948, signalOffset=<optimized out>, local_signal_index=0, argv=0x7ffdda996b80) at kernel/qobject.cpp:3771
#9  0x00007f54be98c087 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (sender=<optimized out>, m=m@entry=0x7f54bede4d80 <QTimer::staticMetaObject>, local_signal_index=local_signal_index@entry=0, argv=argv@entry=0x7ffdda996b80) at kernel/qobject.cpp:3633
#10 0x00007f54be996fd7 in QTimer::timeout(QTimer::QPrivateSignal) (this=<optimized out>, _t1=...) at .moc/moc_qtimer.cpp:200
#11 0x00007f54be98c27b in QObject::event(QEvent*) (this=0x557a8ecc2948, e=<optimized out>) at kernel/qobject.cpp:1232
#12 0x00007f54bf96eb01 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (this=this@entry=0x557a8e694980, receiver=receiver@entry=0x557a8ecc2948, e=e@entry=0x7ffdda996e30) at kernel/qapplication.cpp:3714
#13 0x00007f54bf975cea in QApplication::notify(QObject*, QEvent*) (this=0x7ffdda9970b0, receiver=0x557a8ecc2948, e=0x7ffdda996e30) at kernel/qapplication.cpp:3473
#14 0x00007f54be963be9 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (receiver=0x557a8ecc2948, event=0x7ffdda996e30)
    at ../../include/QtCore/../../src/corelib/kernel/qobject.h:142
#15 0x00007f54be9b1e28 in QCoreApplication::sendEvent(QObject*, QEvent*) (event=0x7ffdda996e30, receiver=<optimized out>)
    at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:234
#16 0x00007f54be9b1e28 in QTimerInfoList::activateTimers() (this=0x557a8e760f60) at kernel/qtimerinfo_unix.cpp:643
#17 0x00007f54be9b00ac in QEventDispatcherUNIX::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...)
    at kernel/qeventdispatcher_unix.cpp:514
#18 0x00007f54b0c0f78d in QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (this=<optimized out>, flags=...)
    at qunixeventdispatcher.cpp:68
#19 0x00007f54be9629fb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (this=0x7ffdda996fc0, flags=...)
    at ../../include/QtCore/../../src/corelib/global/qflags.h:140
#20 0x00007f54be96a78e in QCoreApplication::exec() () at ../../include/QtCore/../../src/corelib/global/qflags.h:120
#21 0x00007f54c4b03c59 in kdemain(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/dolphin-18.04.2-1.1.x86_64/src/main.cpp:150
#22 0x00007f54c472011b in __libc_start_main (main=
    0x557a8d3057c0 <main>, argc=3, argv=0x7ffdda997238, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffdda997228)
    at ../csu/libc-start.c:308
#23 0x0000557a8d3057fa in _start () at ../sysdeps/x86_64/start.S:120

0 timeout should exit immediately, a negative number is locked forever (the documentation tells).

I guess this is a Qt bug.

qint64 QDeadlineTimer::remainingTime() const Q_DECL_NOTHROW
{
    qint64 ns = remainingTimeNSecs();
    return ns <= 0 ? ns : (ns + 999999) / (1000 * 1000);
}

Shouldn't it be:

return ns <= 0 ? **0** : (ns + 999999) / (1000 * 1000);

I agree about tryLock(0) should return immediately, tryLock(-1) should block forever -- I wrote that code and that docu ;-)

Thiago wrote QDeadLineTimer later on though, and ported QLockFile to it. Thiago, any input?

I guess this is a Qt bug.

qint64 QDeadlineTimer::remainingTime() const Q_DECL_NOTHROW
{
    qint64 ns = remainingTimeNSecs();
    return ns <= 0 ? ns : (ns + 999999) / (1000 * 1000);
}

Shouldn't it be:

return ns <= 0 ? **0** : (ns + 999999) / (1000 * 1000);

I answer myself. It is ok. If remainingTimeNSecs() return -1 it also returns -1 (never expire), and in inremainingTimeNSecs() it can only be -1 or 0 or >0

return raw < 0 ? 0 : raw;

But
(gdb) print timer.remainingTime()
$11 = -1
(gdb) print sleepTime
$13 = 6400

Therefore isForever() is returning true. Why?

I agree about tryLock(0) should return immediately, tryLock(-1) should block forever -- I wrote that code and that docu ;-)

Thiago wrote QDeadLineTimer later on though, and ported QLockFile to it. Thiago, any input?

QDT has no escape path for 0. The constructor calls setRemainngTime(0), which calls setPreciseRemainingTime(0, 0), which will get the current time, add zero, and store it.

After all of that, the QDT should return that the remaining time is zero, since it's expired.

remainingTime() calls remainingTimeNSecs(), which calls rawRemainingTimeNSecs(), which should return a negative value. remainingTimeNSecs() should detect the negative and return 0; remainingTime detects the zero and returns it.

(gdb) print timer.remainingTime()
$11 = -1

That's not supposed to happen.

Quick testing via gdb:

Breakpoint 1, QLockFile::tryLock (this=0x7fffffffc6d8, timeout=0) at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/io/qlockfile.cpp:241
241         Q_D(QLockFile);
(gdb) n
242         QDeadlineTimer timer(qMax(timeout, -1));    // QDT only takes -1 as "forever"
(gdb) 
243         int sleepTime = 100;
(gdb) 
245             d->lockError = d->tryLock_sys();
(gdb) 
246             switch (d->lockError) {
(gdb) 
254                 if (!d->isLocked && d->isApparentlyStale()) {
(gdb) 
265                 break;
(gdb) 
268             int remainingTime = timer.remainingTime();
(gdb) p timer
$4 = {t1 = 39043, t2 = 76902106, type = 1}
(gdb) s
QDeadlineTimer::remainingTime (this=0x7fffffffc590) at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qdeadlinetimer.cpp:426
426         qint64 ns = remainingTimeNSecs();
(gdb) s
QDeadlineTimer::remainingTimeNSecs (this=0x7fffffffc590) at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qdeadlinetimer.cpp:440
440         if (isForever())
(gdb) n
442         qint64 raw = rawRemainingTimeNSecs();
(gdb) n
443         return raw < 0 ? 0 : raw;
(gdb) p raw
$5 = -24344165069
(gdb) fin
Run till exit from #0  QDeadlineTimer::remainingTimeNSecs (this=0x7fffffffc590)
    at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qdeadlinetimer.cpp:443
0x00007ffff7a1d014 in QDeadlineTimer::remainingTime (this=0x7fffffffc590)
    at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qdeadlinetimer.cpp:426
426         qint64 ns = remainingTimeNSecs();
Value returned is $6 = 0
(gdb) 
Run till exit from #0  0x00007ffff7a1d014 in QDeadlineTimer::remainingTime (this=0x7fffffffc590)
    at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qdeadlinetimer.cpp:426
QLockFile::tryLock (this=0x7fffffffc6d8, timeout=0) at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/io/qlockfile.cpp:268
268             int remainingTime = timer.remainingTime();
Value returned is $7 = 0

Another hypothesis:

QDeadlineTimer::QDeadlineTimer(qint64 msecs, Qt::TimerType type) Q_DECL_NOTHROW
    : t2(0)
{
    setRemainingTime(msecs, type);
}

As t1 is not initialized and QDeadlineTimer::setPreciseRemainingTime only add to t1, it could be any value instead of 0?.

Should I open a Qt bug?

thiago added a comment.EditedJul 24 2018, 4:00 PM

Another hypothesis:

QDeadlineTimer::QDeadlineTimer(qint64 msecs, Qt::TimerType type) Q_DECL_NOTHROW
    : t2(0)
{
    setRemainingTime(msecs, type);
}

As t1 is not initialized and QDeadlineTimer::setPreciseRemainingTime only add to t1, it could be any value instead of 0?.

Should I open a Qt bug?

No, because your statement is incorrect. setPreciseRemainingTime does assign to t1:

*this = current(timerType);
if (QDeadlineTimerNanosecondsInT2) {
    t1 += secs + toSecsAndNSecs(nsecs).first;
    t2 += toSecsAndNSecs(nsecs).second;

Can you print the contents of the timer object inside tryLock()?

Can you print the contents of the timer object inside tryLock()?

(gdb) info frame
Stack level 2, frame at 0x7ffdda9967c0:
 rip = 0x7f54be8bc985 in QLockFile::tryLock (io/qlockfile.cpp:274); saved rip = 0x7f54c0a23afb
 called by frame at 0x7ffdda996860, caller of frame at 0x7ffdda996730
 source language c++.
 Arglist at 0x7ffdda996728, args: this=<optimized out>, timeout=<optimized out>
 Locals at 0x7ffdda996728, Previous frame's sp is 0x7ffdda9967c0
 Saved registers:
  rbx at 0x7ffdda996788, rbp at 0x7ffdda996790, r12 at 0x7ffdda996798, r13 at 0x7ffdda9967a0, r14 at 0x7ffdda9967a8, r15 at 0x7ffdda9967b0, rip at 0x7ffdda9967b8
(gdb) info locals
remainingTime = <optimized out>
d = 0x557a916a98f0
timer = {t1 = 9223372036854775807, t2 = 0, type = 1}
sleepTime = 6400
(gdb) up
#3  0x00007f54c0a23afb in KDEInitInterface::ensureKdeinitRunning() () from /usr/lib64/libKF5DBusAddons.so.5
(gdb) info locals
No symbol table info available.
(gdb) info frame
Stack level 3, frame at 0x7ffdda996860:
 rip = 0x7f54c0a23afb in KDEInitInterface::ensureKdeinitRunning(); saved rip = 0x7f54c2d16ffb
 called by frame at 0x7ffdda9968a0, caller of frame at 0x7ffdda9967c0
 Arglist at 0x7ffdda9967b8, args: 
 Locals at 0x7ffdda9967b8, Previous frame's sp is 0x7ffdda996860
 Saved registers:
  rbx at 0x7ffdda996828, rbp at 0x7ffdda996830, r12 at 0x7ffdda996838, r13 at 0x7ffdda996840, r14 at 0x7ffdda996848, r15 at 0x7ffdda996850, rip at 0x7ffdda996858

No, because your statement is incorrect. setPreciseRemainingTime does assign to t1:

t1 += secs + toSecsAndNSecs(nsecs).first;

Yes, but this is assuming t1 = 0, I mean, it is not t1 = secs.... (not with +=).

timer = {t1 = 9223372036854775807, t2 = 0, type = 1}

This is indeed Forever. How did it get there?

I showed in my debug session that the QDeadlineTimer is passed zero, and then it does initialise properly. So I'm now beginning to question the compiler. Specifically, this line:

QDeadlineTimer timer(qMax(timeout, -1));    // QDT only takes -1 as "forever"

Is it possible that the compiler miscompiled qMax and caused a value of -1 to be passed?

Alternatively, could timeout be -1? The call site is (before your patch):

if (!lock.tryLock()) {

Which should get the default value of 0. Could it be getting -1 somehow? Maybe your distribution patched Qt?

Can you provide the disassembly of those two functions? Just run "disass" in gdb from those two frames and paste here.

No, because your statement is incorrect. setPreciseRemainingTime does assign to t1:

t1 += secs + toSecsAndNSecs(nsecs).first;

Yes, but this is assuming t1 = 0, I mean, it is not t1 = secs.... (not with +=).

Wrong line. It does assign here:

*this = current(timerType);

And even if it didn't, the value in the timer is very specific (t1 == INT64_MAX and t2 == 0). The chance of getting that from uninitialised data is too small to be considered.

(gdb) disass
Dump of assembler code for function _ZN9QLockFile7tryLockEi:
   0x00007f54be8bc750 <+0>:     push   %r15
   0x00007f54be8bc752 <+2>:     mov    $0xffffffff,%eax
   0x00007f54be8bc757 <+7>:     mov    $0x1,%edx
   0x00007f54be8bc75c <+12>:    push   %r14
   0x00007f54be8bc75e <+14>:    push   %r13
   0x00007f54be8bc760 <+16>:    push   %r12
   0x00007f54be8bc762 <+18>:    push   %rbp
   0x00007f54be8bc763 <+19>:    push   %rbx
   0x00007f54be8bc764 <+20>:    mov    $0x64,%ebx
   0x00007f54be8bc769 <+25>:    sub    $0x58,%rsp
   0x00007f54be8bc76d <+29>:    test   %esi,%esi
   0x00007f54be8bc76f <+31>:    mov    (%rdi),%rbp
   0x00007f54be8bc772 <+34>:    cmovs  %eax,%esi
   0x00007f54be8bc775 <+37>:    lea    0x20(%rsp),%r12
   0x00007f54be8bc77a <+42>:    lea    0x30(%rsp),%r14
   0x00007f54be8bc77f <+47>:    lea    0x10(%rsp),%r15
   0x00007f54be8bc784 <+52>:    lea    0x18(%rsp),%r13
   0x00007f54be8bc789 <+57>:    mov    %r12,%rdi
   0x00007f54be8bc78c <+60>:    movslq %esi,%rsi
   0x00007f54be8bc78f <+63>:    callq  0x7f54be962150 <QDeadlineTimer::QDeadlineTimer(long long, Qt::TimerType)>
   0x00007f54be8bc794 <+68>:    mov    %rbp,%rdi
   0x00007f54be8bc797 <+71>:    callq  0x7f54be910d00 <_ZN16QLockFilePrivate11tryLock_sysEv>
   0x00007f54be8bc79c <+76>:    mov    %eax,0x10(%rbp)
   0x00007f54be8bc79f <+79>:    cmp    $0x1,%eax
   0x00007f54be8bc7a2 <+82>:    je     0x7f54be8bc7d0 <_ZN9QLockFile7tryLockEi+128>
   0x00007f54be8bc7a4 <+84>:    test   %eax,%eax
   0x00007f54be8bc7a6 <+86>:    je     0x7f54be8bc9a0 <_ZN9QLockFile7tryLockEi+592>
   0x00007f54be8bc7ac <+92>:    cmp    $0x3,%eax
   0x00007f54be8bc7af <+95>:    ja     0x7f54be8bc968 <_ZN9QLockFile7tryLockEi+536>
   0x00007f54be8bc7b5 <+101>:   add    $0x58,%rsp
   0x00007f54be8bc7b9 <+105>:   xor    %eax,%eax
   0x00007f54be8bc7bb <+107>:   pop    %rbx
   0x00007f54be8bc7bc <+108>:   pop    %rbp
   0x00007f54be8bc7bd <+109>:   pop    %r12
   0x00007f54be8bc7bf <+111>:   pop    %r13
   0x00007f54be8bc7c1 <+113>:   pop    %r14
   0x00007f54be8bc7c3 <+115>:   pop    %r15
   0x00007f54be8bc7c5 <+117>:   retq   
   0x00007f54be8bc7c6 <+118>:   nopw   %cs:0x0(%rax,%rax,1)
   0x00007f54be8bc7d0 <+128>:   cmpb   $0x0,0x14(%rbp)
   0x00007f54be8bc7d4 <+132>:   jne    0x7f54be8bc968 <_ZN9QLockFile7tryLockEi+536>
   0x00007f54be8bc7da <+138>:   mov    %rbp,%rdi
   0x00007f54be8bc7dd <+141>:   callq  0x7f54be8bc3a0 <_ZNK16QLockFilePrivate17isApparentlyStaleEv>
   0x00007f54be8bc7e2 <+146>:   test   %al,%al
   0x00007f54be8bc7e4 <+148>:   je     0x7f54be8bc968 <_ZN9QLockFile7tryLockEi+536>
   0x00007f54be8bc7ea <+154>:   mov    %r14,%rdi
   0x00007f54be8bc7ed <+157>:   callq  0x7f54be807360 <QDateTime::currentDateTime()>
   0x00007f54be8bc7f2 <+162>:   mov    %rbp,%rsi
   0x00007f54be8bc7f5 <+165>:   mov    %r15,%rdi
   0x00007f54be8bc7f8 <+168>:   callq  0x7f54be8b2640 <_ZN9QFileInfoC2ERK7QString>
   0x00007f54be8bc7fd <+173>:   mov    %r15,%rsi
   0x00007f54be8bc800 <+176>:   mov    %r13,%rdi
   0x00007f54be8bc803 <+179>:   callq  0x7f54be8b4160 <QFileInfo::lastModified() const>
   0x00007f54be8bc808 <+184>:   mov    %r13,%rsi
   0x00007f54be8bc80b <+187>:   mov    %r14,%rdi
   0x00007f54be8bc80e <+190>:   callq  0x7f54be806e90 <QDateTime::operator<(QDateTime const&) const>
   0x00007f54be8bc813 <+195>:   mov    %r13,%rdi
   0x00007f54be8bc816 <+198>:   mov    %al,0x8(%rsp)
   0x00007f54be8bc81a <+202>:   callq  0x7f54be804a00 <QDateTime::~QDateTime()>
   0x00007f54be8bc81f <+207>:   mov    %r15,%rdi
   0x00007f54be8bc822 <+210>:   callq  0x7f54be8b43a0 <QFileInfo::~QFileInfo()>
   0x00007f54be8bc827 <+215>:   mov    %r14,%rdi
   0x00007f54be8bc82a <+218>:   callq  0x7f54be804a00 <QDateTime::~QDateTime()>
   0x00007f54be8bc82f <+223>:   movzbl 0x8(%rsp),%eax
   0x00007f54be8bc834 <+228>:   test   %al,%al
   0x00007f54be8bc836 <+230>:   je     0x7f54be8bc8c0 <_ZN9QLockFile7tryLockEi+368>
   0x00007f54be8bc83c <+236>:   lea    0x1564dd(%rip),%rax        # 0x7f54bea12d20
   0x00007f54be8bc843 <+243>:   pxor   %xmm0,%xmm0
   0x00007f54be8bc847 <+247>:   movq   $0x2,0x30(%rsp)
   0x00007f54be8bc850 <+256>:   mov    %rax,0x48(%rsp)
   0x00007f54be8bc855 <+261>:   mov    0x0(%rbp),%rax
   0x00007f54be8bc859 <+265>:   movups %xmm0,0x38(%rsp)
   0x00007f54be8bc85e <+270>:   mov    %rax,0x18(%rsp)
   0x00007f54be8bc863 <+275>:   mov    (%rax),%edx
   0x00007f54be8bc865 <+277>:   add    $0x1,%edx
   0x00007f54be8bc868 <+280>:   cmp    $0x1,%edx
   0x00007f54be8bc86b <+283>:   ja     0x7f54be8bc9f1 <_ZN9QLockFile7tryLockEi+673>
   0x00007f54be8bc871 <+289>:   mov    %r13,%rdi
   0x00007f54be8bc874 <+292>:   callq  0x7f54be83d530 <QString::utf16() const>
   0x00007f54be8bc879 <+297>:   mov    %rax,%rdx
   0x00007f54be8bc87c <+300>:   lea    0x20a715(%rip),%rsi        # 0x7f54beac6f98
   0x00007f54be8bc883 <+307>:   mov    %r14,%rdi
   0x00007f54be8bc886 <+310>:   xor    %eax,%eax
   0x00007f54be8bc888 <+312>:   callq  0x7f54be7b7d00 <QMessageLogger::info(char const*, ...) const>
   0x00007f54be8bc88d <+317>:   mov    0x18(%rsp),%rdi
   0x00007f54be8bc892 <+322>:   mov    (%rdi),%eax
   0x00007f54be8bc894 <+324>:   test   %eax,%eax
   0x00007f54be8bc896 <+326>:   je     0x7f54be8bc8a8 <_ZN9QLockFile7tryLockEi+344>
   0x00007f54be8bc898 <+328>:   cmp    $0xffffffff,%eax
   0x00007f54be8bc89b <+331>:   je     0x7f54be8bc8c0 <_ZN9QLockFile7tryLockEi+368>
   0x00007f54be8bc89d <+333>:   lock subl $0x1,(%rdi)
   0x00007f54be8bc8a1 <+337>:   mov    0x18(%rsp),%rdi
   0x00007f54be8bc8a6 <+342>:   jne    0x7f54be8bc8c0 <_ZN9QLockFile7tryLockEi+368>
   0x00007f54be8bc8a8 <+344>:   mov    $0x8,%edx
   0x00007f54be8bc8ad <+349>:   mov    $0x2,%esi
   0x00007f54be8bc8b2 <+354>:   callq  0x7f54be7cb3d0 <QArrayData::deallocate(QArrayData*, unsigned long, unsigned long)>
   0x00007f54be8bc8b7 <+359>:   nopw   0x0(%rax,%rax,1)
   0x00007f54be8bc8c0 <+368>:   mov    0x0(%rbp),%rax
   0x00007f54be8bc8c4 <+372>:   xor    %edx,%edx
   0x00007f54be8bc8c6 <+374>:   mov    %r14,%rdi
   0x00007f54be8bc8c9 <+377>:   mov    0x4(%rax),%esi
   0x00007f54be8bc8cc <+380>:   add    $0x7,%esi
   0x00007f54be8bc8cf <+383>:   callq  0x7f54be838470 <_ZN7QStringC2EiN2Qt14InitializationE>
   0x00007f54be8bc8d4 <+388>:   mov    0x0(%rbp),%rsi
   0x00007f54be8bc8d8 <+392>:   mov    0x30(%rsp),%rcx
   0x00007f54be8bc8dd <+397>:   movslq 0x4(%rsi),%rdx
   0x00007f54be8bc8e1 <+401>:   add    0x10(%rcx),%rcx
   0x00007f54be8bc8e5 <+405>:   mov    %rcx,%rdi
   0x00007f54be8bc8e8 <+408>:   add    0x10(%rsi),%rsi
   0x00007f54be8bc8ec <+412>:   lea    (%rdx,%rdx,1),%r8
   0x00007f54be8bc8f0 <+416>:   mov    %r8,%rdx
   0x00007f54be8bc8f3 <+419>:   mov    %r8,0x8(%rsp)
   0x00007f54be8bc8f8 <+424>:   callq  0x7f54be788af0 <memcpy@plt>
   0x00007f54be8bc8fd <+429>:   mov    0x8(%rsp),%r8
   0x00007f54be8bc902 <+434>:   mov    $0x7,%esi
   0x00007f54be8bc907 <+439>:   lea    0x20a635(%rip),%rdi        # 0x7f54beac6f43
   0x00007f54be8bc90e <+446>:   lea    (%rax,%r8,1),%rdx
   0x00007f54be8bc912 <+450>:   callq  0x7f54be843b30 <QAbstractConcatenable::appendLatin1To(char const*, int, QChar*)>
   0x00007f54be8bc917 <+455>:   mov    %r14,%rsi
   0x00007f54be8bc91a <+458>:   mov    %r13,%rdi
   0x00007f54be8bc91d <+461>:   callq  0x7f54be8bb100 <QLockFile::QLockFile(QString const&)>
   0x00007f54be8bc922 <+466>:   mov    0x30(%rsp),%rdi
   0x00007f54be8bc927 <+471>:   mov    (%rdi),%eax
   0x00007f54be8bc929 <+473>:   test   %eax,%eax
   0x00007f54be8bc92b <+475>:   je     0x7f54be8bc9c0 <_ZN9QLockFile7tryLockEi+624>
   0x00007f54be8bc931 <+481>:   cmp    $0xffffffff,%eax
   0x00007f54be8bc934 <+484>:   je     0x7f54be8bc941 <_ZN9QLockFile7tryLockEi+497>
   0x00007f54be8bc936 <+486>:   lock subl $0x1,(%rdi)
   0x00007f54be8bc93a <+490>:   mov    0x30(%rsp),%rdi
   0x00007f54be8bc93f <+495>:   je     0x7f54be8bc9c0 <_ZN9QLockFile7tryLockEi+624>
   0x00007f54be8bc941 <+497>:   xor    %esi,%esi
   0x00007f54be8bc943 <+499>:   mov    %r13,%rdi
   0x00007f54be8bc946 <+502>:   callq  0x7f54be8bc750 <_ZN9QLockFile7tryLockEi>
   0x00007f54be8bc94b <+507>:   test   %al,%al
   0x00007f54be8bc94d <+509>:   je     0x7f54be8bc95b <_ZN9QLockFile7tryLockEi+523>
   0x00007f54be8bc94f <+511>:   mov    %rbp,%rdi
   0x00007f54be8bc952 <+514>:   callq  0x7f54be8bc3a0 <_ZNK16QLockFilePrivate17isApparentlyStaleEv>
   0x00007f54be8bc957 <+519>:   test   %al,%al
   0x00007f54be8bc959 <+521>:   jne    0x7f54be8bc9d4 <_ZN9QLockFile7tryLockEi+644>
   0x00007f54be8bc95b <+523>:   mov    %r13,%rdi
   0x00007f54be8bc95e <+526>:   callq  0x7f54be8bb160 <QLockFile::~QLockFile()>
   0x00007f54be8bc963 <+531>:   nopl   0x0(%rax,%rax,1)
   0x00007f54be8bc968 <+536>:   mov    %r12,%rdi
   0x00007f54be8bc96b <+539>:   callq  0x7f54be962240 <QDeadlineTimer::remainingTime() const>
   0x00007f54be8bc970 <+544>:   test   %eax,%eax
   0x00007f54be8bc972 <+546>:   je     0x7f54be8bc7b5 <_ZN9QLockFile7tryLockEi+101>
   0x00007f54be8bc978 <+552>:   cmp    %eax,%ebx
   0x00007f54be8bc97a <+554>:   cmova  %eax,%ebx
   0x00007f54be8bc97d <+557>:   movslq %ebx,%rdi
   0x00007f54be8bc980 <+560>:   callq  0x7f54be7ca170 <QThread::msleep(unsigned long)>
=> 0x00007f54be8bc985 <+565>:   lea    (%rbx,%rbx,1),%eax
   0x00007f54be8bc988 <+568>:   cmp    $0x1388,%ebx
   0x00007f54be8bc98e <+574>:   cmovl  %eax,%ebx
   0x00007f54be8bc991 <+577>:   jmpq   0x7f54be8bc794 <_ZN9QLockFile7tryLockEi+68>
   0x00007f54be8bc996 <+582>:   nopw   %cs:0x0(%rax,%rax,1)
   0x00007f54be8bc9a0 <+592>:   movb   $0x1,0x14(%rbp)
   0x00007f54be8bc9a4 <+596>:   add    $0x58,%rsp
   0x00007f54be8bc9a8 <+600>:   mov    $0x1,%eax
   0x00007f54be8bc9ad <+605>:   pop    %rbx
   0x00007f54be8bc9ae <+606>:   pop    %rbp
   0x00007f54be8bc9af <+607>:   pop    %r12
   0x00007f54be8bc9b1 <+609>:   pop    %r13
   0x00007f54be8bc9b3 <+611>:   pop    %r14
   0x00007f54be8bc9b5 <+613>:   pop    %r15
   0x00007f54be8bc9b7 <+615>:   retq   
   0x00007f54be8bc9b8 <+616>:   nopl   0x0(%rax,%rax,1)
   0x00007f54be8bc9c0 <+624>:   mov    $0x8,%edx
   0x00007f54be8bc9c5 <+629>:   mov    $0x2,%esi
   0x00007f54be8bc9ca <+634>:   callq  0x7f54be7cb3d0 <QArrayData::deallocate(QArrayData*, unsigned long, unsigned long)>
   0x00007f54be8bc9cf <+639>:   jmpq   0x7f54be8bc941 <_ZN9QLockFile7tryLockEi+497>
   0x00007f54be8bc9d4 <+644>:   mov    %rbp,%rdi
   0x00007f54be8bc9d7 <+647>:   callq  0x7f54be911030 <_ZN16QLockFilePrivate15removeStaleLockEv>
   0x00007f54be8bc9dc <+652>:   test   %al,%al
   0x00007f54be8bc9de <+654>:   je     0x7f54be8bc95b <_ZN9QLockFile7tryLockEi+523>
   0x00007f54be8bc9e4 <+660>:   mov    %r13,%rdi
   0x00007f54be8bc9e7 <+663>:   callq  0x7f54be8bb160 <QLockFile::~QLockFile()>
   0x00007f54be8bc9ec <+668>:   jmpq   0x7f54be8bc794 <_ZN9QLockFile7tryLockEi+68>
   0x00007f54be8bc9f1 <+673>:   lock addl $0x1,(%rax)
   0x00007f54be8bc9f5 <+677>:   jmpq   0x7f54be8bc871 <_ZN9QLockFile7tryLockEi+289>
   0x00007f54be8bc9fa <+682>:   mov    %rax,%rbx
   0x00007f54be8bc9fd <+685>:   jmpq   0x7f54be7945fe <QLockFile::tryLock(int)>
   0x00007f54be8bca02 <+690>:   mov    %rax,%rbx
   0x00007f54be8bca05 <+693>:   jmpq   0x7f54be79460e <QLockFile::tryLock(int)+16>
   0x00007f54be8bca0a <+698>:   mov    %rax,%rbx
   0x00007f54be8bca0d <+701>:   jmpq   0x7f54be79461e <QLockFile::tryLock(int)+32>
   0x00007f54be8bca12 <+706>:   mov    %rax,%rbx
   0x00007f54be8bca15 <+709>:   jmpq   0x7f54be79462e <QLockFile::tryLock(int)+48>
   0x00007f54be8bca1a <+714>:   mov    %rax,%rbx
   0x00007f54be8bca1d <+717>:   jmpq   0x7f54be794636 <QLockFile::tryLock(int)+56>
   0x00007f54be8bca22 <+722>:   mov    %rax,%rbx
   0x00007f54be8bca25 <+725>:   jmpq   0x7f54be79463e <QLockFile::tryLock(int)+64>
End of assembler dump.

(gdb) disass
Dump of assembler code for function _ZN16KDEInitInterface20ensureKdeinitRunningEv:
   0x00007f54c0a238f0 <+0>:     push   %r15
   0x00007f54c0a238f2 <+2>:     push   %r14
   0x00007f54c0a238f4 <+4>:     push   %r13
   0x00007f54c0a238f6 <+6>:     push   %r12
   0x00007f54c0a238f8 <+8>:     push   %rbp
   0x00007f54c0a238f9 <+9>:     push   %rbx
   0x00007f54c0a238fa <+10>:    sub    $0x68,%rsp
   0x00007f54c0a238fe <+14>:    mov    %fs:0x28,%rax
   0x00007f54c0a23907 <+23>:    mov    %rax,0x58(%rsp)
   0x00007f54c0a2390c <+28>:    xor    %eax,%eax
   0x00007f54c0a2390e <+30>:    lea    0x30(%rsp),%rbx
   0x00007f54c0a23913 <+35>:    lea    0x28(%rsp),%rbp
   0x00007f54c0a23918 <+40>:    mov    %rbx,%rdi
   0x00007f54c0a2391b <+43>:    callq  0x7f54c0a1ecb0 <_ZN19KDBusConnectionPool16threadConnectionEv>
   0x00007f54c0a23920 <+48>:    mov    %rbx,%rdi
   0x00007f54c0a23923 <+51>:    callq  0x7f54c0a1e4d0 <_ZNK15QDBusConnection9interfaceEv@plt>
   0x00007f54c0a23928 <+56>:    mov    %rbx,%rdi
   0x00007f54c0a2392b <+59>:    mov    %rax,%r14
   0x00007f54c0a2392e <+62>:    callq  0x7f54c0a1e4a0 <_ZN15QDBusConnectionD1Ev@plt>
   0x00007f54c0a23933 <+67>:    mov    %rbx,%rdi
   0x00007f54c0a23936 <+70>:    mov    %rbp,%rdx
   0x00007f54c0a23939 <+73>:    mov    %r14,%rsi
   0x00007f54c0a2393c <+76>:    lea    0x3d1d(%rip),%rax        # 0x7f54c0a27660
   0x00007f54c0a23943 <+83>:    mov    %rax,0x28(%rsp)
   0x00007f54c0a23948 <+88>:    callq  0x7f54c0a1e180 <_ZNK24QDBusConnectionInterface19isServiceRegisteredERK7QString@plt>
   0x00007f54c0a2394d <+93>:    mov    0x40(%rsp),%rdi
   0x00007f54c0a23952 <+98>:    movzbl 0x50(%rsp),%r12d
   0x00007f54c0a23958 <+104>:   mov    (%rdi),%eax
   0x00007f54c0a2395a <+106>:   test   %eax,%eax
   0x00007f54c0a2395c <+108>:   je     0x7f54c0a239d0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+224>
   0x00007f54c0a2395e <+110>:   cmp    $0xffffffff,%eax
   0x00007f54c0a23961 <+113>:   je     0x7f54c0a2396e <_ZN16KDEInitInterface20ensureKdeinitRunningEv+126>
   0x00007f54c0a23963 <+115>:   lock subl $0x1,(%rdi)
   0x00007f54c0a23967 <+119>:   mov    0x40(%rsp),%rdi
   0x00007f54c0a2396c <+124>:   je     0x7f54c0a239d0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+224>
   0x00007f54c0a2396e <+126>:   mov    0x38(%rsp),%rdi
   0x00007f54c0a23973 <+131>:   mov    (%rdi),%eax
   0x00007f54c0a23975 <+133>:   test   %eax,%eax
   0x00007f54c0a23977 <+135>:   je     0x7f54c0a239ea <_ZN16KDEInitInterface20ensureKdeinitRunningEv+250>
   0x00007f54c0a23979 <+137>:   cmp    $0xffffffff,%eax
   0x00007f54c0a2397c <+140>:   je     0x7f54c0a23989 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+153>
   0x00007f54c0a2397e <+142>:   lock subl $0x1,(%rdi)
   0x00007f54c0a23982 <+146>:   mov    0x38(%rsp),%rdi
   0x00007f54c0a23987 <+151>:   je     0x7f54c0a239ea <_ZN16KDEInitInterface20ensureKdeinitRunningEv+250>
   0x00007f54c0a23989 <+153>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a2398e <+158>:   mov    (%rdi),%eax
   0x00007f54c0a23990 <+160>:   test   %eax,%eax
   0x00007f54c0a23992 <+162>:   je     0x7f54c0a23a04 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+276>
   0x00007f54c0a23994 <+164>:   cmp    $0xffffffff,%eax
   0x00007f54c0a23997 <+167>:   je     0x7f54c0a239a4 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+180>
   0x00007f54c0a23999 <+169>:   lock subl $0x1,(%rdi)
   0x00007f54c0a2399d <+173>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a239a2 <+178>:   je     0x7f54c0a23a04 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+276>
   0x00007f54c0a239a4 <+180>:   test   %r12b,%r12b
   0x00007f54c0a239a7 <+183>:   je     0x7f54c0a23a18 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+296>
   0x00007f54c0a239a9 <+185>:   mov    0x58(%rsp),%rax
   0x00007f54c0a239ae <+190>:   xor    %fs:0x28,%rax
   0x00007f54c0a239b7 <+199>:   jne    0x7f54c0a24175 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2181>
   0x00007f54c0a239bd <+205>:   add    $0x68,%rsp
   0x00007f54c0a239c1 <+209>:   pop    %rbx
   0x00007f54c0a239c2 <+210>:   pop    %rbp
   0x00007f54c0a239c3 <+211>:   pop    %r12
   0x00007f54c0a239c5 <+213>:   pop    %r13
   0x00007f54c0a239c7 <+215>:   pop    %r14
   0x00007f54c0a239c9 <+217>:   pop    %r15
   0x00007f54c0a239cb <+219>:   retq   
   0x00007f54c0a239cc <+220>:   nopl   0x0(%rax)
   0x00007f54c0a239d0 <+224>:   mov    $0x8,%edx
   0x00007f54c0a239d5 <+229>:   mov    $0x2,%esi
   0x00007f54c0a239da <+234>:   callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a239df <+239>:   mov    0x38(%rsp),%rdi
   0x00007f54c0a239e4 <+244>:   mov    (%rdi),%eax
   0x00007f54c0a239e6 <+246>:   test   %eax,%eax
   0x00007f54c0a239e8 <+248>:   jne    0x7f54c0a23979 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+137>
   0x00007f54c0a239ea <+250>:   mov    $0x8,%edx
   0x00007f54c0a239ef <+255>:   mov    $0x2,%esi
   0x00007f54c0a239f4 <+260>:   callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a239f9 <+265>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a239fe <+270>:   mov    (%rdi),%eax
   0x00007f54c0a23a00 <+272>:   test   %eax,%eax
   0x00007f54c0a23a02 <+274>:   jne    0x7f54c0a23994 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+164>
   0x00007f54c0a23a04 <+276>:   mov    $0x8,%edx
   0x00007f54c0a23a09 <+281>:   mov    $0x2,%esi
   0x00007f54c0a23a0e <+286>:   callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23a13 <+291>:   test   %r12b,%r12b
   0x00007f54c0a23a16 <+294>:   jne    0x7f54c0a239a9 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+185>
   0x00007f54c0a23a18 <+296>:   callq  0x7f54c0a24c50
   0x00007f54c0a23a1d <+301>:   movzbl 0x10(%rax),%eax
   0x00007f54c0a23a21 <+305>:   test   %al,%al
   0x00007f54c0a23a23 <+307>:   jne    0x7f54c0a23e40 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1360>
   0x00007f54c0a23a29 <+313>:   mov    %rbp,%rdi
   0x00007f54c0a23a2c <+316>:   callq  0x7f54c0a1e660 <_ZN4QDir8tempPathEv@plt>
   0x00007f54c0a23a31 <+321>:   mov    0x28(%rsp),%rax
   0x00007f54c0a23a36 <+326>:   xor    %edx,%edx
   0x00007f54c0a23a38 <+328>:   mov    %rbx,%rdi
   0x00007f54c0a23a3b <+331>:   mov    0x4(%rax),%esi
   0x00007f54c0a23a3e <+334>:   add    $0x11,%esi
   0x00007f54c0a23a41 <+337>:   callq  0x7f54c0a1e6d0 <_ZN7QStringC1EiN2Qt14InitializationE@plt>
   0x00007f54c0a23a46 <+342>:   mov    0x28(%rsp),%rsi
   0x00007f54c0a23a4b <+347>:   mov    0x30(%rsp),%rcx
   0x00007f54c0a23a50 <+352>:   movslq 0x4(%rsi),%r12
   0x00007f54c0a23a54 <+356>:   add    0x10(%rcx),%rcx
   0x00007f54c0a23a58 <+360>:   mov    %rcx,%rdi
   0x00007f54c0a23a5b <+363>:   add    0x10(%rsi),%rsi
   0x00007f54c0a23a5f <+367>:   add    %r12,%r12
   0x00007f54c0a23a62 <+370>:   mov    %r12,%rdx
   0x00007f54c0a23a65 <+373>:   callq  0x7f54c0a1e460 <memcpy@plt>
   0x00007f54c0a23a6a <+378>:   mov    $0x2f,%esi
   0x00007f54c0a23a6f <+383>:   lea    0x3aa1(%rip),%rdi        # 0x7f54c0a27517
   0x00007f54c0a23a76 <+390>:   mov    %rax,%rcx
   0x00007f54c0a23a79 <+393>:   add    %r12,%rcx
   0x00007f54c0a23a7c <+396>:   mov    %rsp,%r12
   0x00007f54c0a23a7f <+399>:   mov    %si,(%rcx)
   0x00007f54c0a23a82 <+402>:   lea    0x2(%rcx),%rdx
   0x00007f54c0a23a86 <+406>:   mov    $0x10,%esi
   0x00007f54c0a23a8b <+411>:   callq  0x7f54c0a1e380 <_ZN21QAbstractConcatenable14appendLatin1ToEPKciP5QChar@plt>
   0x00007f54c0a23a90 <+416>:   mov    %r12,%rdi
   0x00007f54c0a23a93 <+419>:   mov    %rbx,%rsi
   0x00007f54c0a23a96 <+422>:   callq  0x7f54c0a1e400 <_ZN9QLockFileC1ERK7QString@plt>
   0x00007f54c0a23a9b <+427>:   mov    0x30(%rsp),%rdi
   0x00007f54c0a23aa0 <+432>:   mov    (%rdi),%eax
   0x00007f54c0a23aa2 <+434>:   test   %eax,%eax
   0x00007f54c0a23aa4 <+436>:   je     0x7f54c0a23da8 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1208>
   0x00007f54c0a23aaa <+442>:   cmp    $0xffffffff,%eax
   0x00007f54c0a23aad <+445>:   je     0x7f54c0a23abe <_ZN16KDEInitInterface20ensureKdeinitRunningEv+462>
   0x00007f54c0a23aaf <+447>:   lock subl $0x1,(%rdi)
   0x00007f54c0a23ab3 <+451>:   mov    0x30(%rsp),%rdi
   0x00007f54c0a23ab8 <+456>:   je     0x7f54c0a23da8 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1208>
   0x00007f54c0a23abe <+462>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a23ac3 <+467>:   mov    (%rdi),%eax
   0x00007f54c0a23ac5 <+469>:   test   %eax,%eax
   0x00007f54c0a23ac7 <+471>:   je     0x7f54c0a23d90 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1184>
   0x00007f54c0a23acd <+477>:   cmp    $0xffffffff,%eax
   0x00007f54c0a23ad0 <+480>:   je     0x7f54c0a23ae1 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+497>
   0x00007f54c0a23ad2 <+482>:   lock subl $0x1,(%rdi)
   0x00007f54c0a23ad6 <+486>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a23adb <+491>:   je     0x7f54c0a23d90 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1184>
   0x00007f54c0a23ae1 <+497>:   xor    %esi,%esi
   0x00007f54c0a23ae3 <+499>:   mov    %r12,%rdi
   0x00007f54c0a23ae6 <+502>:   callq  0x7f54c0a1e960 <_ZN9QLockFile7tryLockEi@plt>
   0x00007f54c0a23aeb <+507>:   test   %al,%al
   0x00007f54c0a23aed <+509>:   jne    0x7f54c0a23b8d <_ZN16KDEInitInterface20ensureKdeinitRunningEv+669>
   0x00007f54c0a23af3 <+515>:   mov    %r12,%rdi
   0x00007f54c0a23af6 <+518>:   callq  0x7f54c0a1e9c0 <_ZN9QLockFile4lockEv@plt>
=> 0x00007f54c0a23afb <+523>:   mov    %rbx,%rdi
   0x00007f54c0a23afe <+526>:   mov    %rbp,%rdx
   0x00007f54c0a23b01 <+529>:   mov    %r14,%rsi
   0x00007f54c0a23b04 <+532>:   lea    0x3b15(%rip),%rax        # 0x7f54c0a27620
   0x00007f54c0a23b0b <+539>:   mov    %rax,0x28(%rsp)
   0x00007f54c0a23b10 <+544>:   callq  0x7f54c0a1e180 <_ZNK24QDBusConnectionInterface19isServiceRegisteredERK7QString@plt>
   0x00007f54c0a23b15 <+549>:   mov    0x40(%rsp),%rdi
   0x00007f54c0a23b1a <+554>:   movzbl 0x50(%rsp),%r13d
   0x00007f54c0a23b20 <+560>:   mov    (%rdi),%eax
   0x00007f54c0a23b22 <+562>:   test   %eax,%eax
   0x00007f54c0a23b24 <+564>:   je     0x7f54c0a23dc0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1232>
   0x00007f54c0a23b2a <+570>:   cmp    $0xffffffff,%eax
   0x00007f54c0a23b2d <+573>:   je     0x7f54c0a23b3e <_ZN16KDEInitInterface20ensureKdeinitRunningEv+590>
   0x00007f54c0a23b2f <+575>:   lock subl $0x1,(%rdi)
   0x00007f54c0a23b33 <+579>:   mov    0x40(%rsp),%rdi
   0x00007f54c0a23b38 <+584>:   je     0x7f54c0a23dc0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1232>
   0x00007f54c0a23b3e <+590>:   mov    0x38(%rsp),%rdi
   0x00007f54c0a23b43 <+595>:   mov    (%rdi),%eax
   0x00007f54c0a23b45 <+597>:   test   %eax,%eax
   0x00007f54c0a23b47 <+599>:   je     0x7f54c0a23ef8 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1544>
   0x00007f54c0a23b4d <+605>:   cmp    $0xffffffff,%eax
   0x00007f54c0a23b50 <+608>:   je     0x7f54c0a23b61 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+625>
   0x00007f54c0a23b52 <+610>:   lock subl $0x1,(%rdi)
   0x00007f54c0a23b56 <+614>:   mov    0x38(%rsp),%rdi
   0x00007f54c0a23b5b <+619>:   je     0x7f54c0a23ef8 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1544>
   0x00007f54c0a23b61 <+625>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a23b66 <+630>:   mov    (%rdi),%eax
   0x00007f54c0a23b68 <+632>:   test   %eax,%eax
   0x00007f54c0a23b6a <+634>:   je     0x7f54c0a23ee0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1520>
   0x00007f54c0a23b70 <+640>:   cmp    $0xffffffff,%eax
   0x00007f54c0a23b73 <+643>:   je     0x7f54c0a23b84 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+660>
   0x00007f54c0a23b75 <+645>:   lock subl $0x1,(%rdi)
   0x00007f54c0a23b79 <+649>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a23b7e <+654>:   je     0x7f54c0a23ee0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1520>
   0x00007f54c0a23b84 <+660>:   test   %r13b,%r13b
   0x00007f54c0a23b87 <+663>:   jne    0x7f54c0a23d83 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1171>
   0x00007f54c0a23b8d <+669>:   mov    0x20744c(%rip),%rax        # 0x7f54c0c2afe0
   0x00007f54c0a23b94 <+676>:   lea    0x8(%rsp),%r14
   0x00007f54c0a23b99 <+681>:   mov    %rbx,%rdx
   0x00007f54c0a23b9c <+684>:   mov    %rbp,%rsi
   0x00007f54c0a23b9f <+687>:   mov    %r14,%rdi
   0x00007f54c0a23ba2 <+690>:   mov    %rax,0x30(%rsp)
   0x00007f54c0a23ba7 <+695>:   lea    0x3a32(%rip),%rax        # 0x7f54c0a275e0
   0x00007f54c0a23bae <+702>:   mov    %rax,0x28(%rsp)
   0x00007f54c0a23bb3 <+707>:   callq  0x7f54c0a1e820 <_ZN14QStandardPaths14findExecutableERK7QStringRK11QStringList@plt>
   0x00007f54c0a23bb8 <+712>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a23bbd <+717>:   mov    (%rdi),%eax
   0x00007f54c0a23bbf <+719>:   test   %eax,%eax
   0x00007f54c0a23bc1 <+721>:   je     0x7f54c0a23e10 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1312>
   0x00007f54c0a23bc7 <+727>:   cmp    $0xffffffff,%eax
   0x00007f54c0a23bca <+730>:   je     0x7f54c0a23bdb <_ZN16KDEInitInterface20ensureKdeinitRunningEv+747>
   0x00007f54c0a23bcc <+732>:   lock subl $0x1,(%rdi)
   0x00007f54c0a23bd0 <+736>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a23bd5 <+741>:   je     0x7f54c0a23e10 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1312>
   0x00007f54c0a23bdb <+747>:   mov    %rbx,%rdi
   0x00007f54c0a23bde <+750>:   callq  0x7f54c0a21240
   0x00007f54c0a23be3 <+755>:   mov    0x8(%rsp),%rax
   0x00007f54c0a23be8 <+760>:   mov    0x4(%rax),%edx
   0x00007f54c0a23beb <+763>:   test   %edx,%edx
   0x00007f54c0a23bed <+765>:   jne    0x7f54c0a23d0f <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1055>
   0x00007f54c0a23bf3 <+771>:   mov    0x2073e6(%rip),%rax        # 0x7f54c0c2afe0
   0x00007f54c0a23bfa <+778>:   lea    0x20(%rsp),%r13
   0x00007f54c0a23bff <+783>:   mov    %rbp,%rdi
   0x00007f54c0a23c02 <+786>:   lea    0x10(%rsp),%r15
   0x00007f54c0a23c07 <+791>:   mov    %rax,0x20(%rsp)
   0x00007f54c0a23c0c <+796>:   callq  0x7f54c0a1e610 <_ZN16QCoreApplication18applicationDirPathEv@plt>
   0x00007f54c0a23c11 <+801>:   mov    %rbp,%rsi
   0x00007f54c0a23c14 <+804>:   mov    %r13,%rdi
   0x00007f54c0a23c17 <+807>:   callq  0x7f54c0a242a0
   0x00007f54c0a23c1c <+812>:   mov    $0x5,%esi
   0x00007f54c0a23c21 <+817>:   mov    %rbx,%rdi
   0x00007f54c0a23c24 <+820>:   callq  0x7f54c0a1e8e0 <_ZN12QLibraryInfo8locationENS_15LibraryLocationE@plt>
   0x00007f54c0a23c29 <+825>:   mov    %rbx,%rsi
   0x00007f54c0a23c2c <+828>:   mov    %r13,%rdi
   0x00007f54c0a23c2f <+831>:   callq  0x7f54c0a242a0
   0x00007f54c0a23c34 <+836>:   mov    %r15,%rdi
   0x00007f54c0a23c37 <+839>:   mov    %r13,%rsi
   0x00007f54c0a23c3a <+842>:   callq  0x7f54c0a212f0
   0x00007f54c0a23c3f <+847>:   mov    0x30(%rsp),%rdi
   0x00007f54c0a23c44 <+852>:   mov    (%rdi),%eax
   0x00007f54c0a23c46 <+854>:   test   %eax,%eax
   0x00007f54c0a23c48 <+856>:   je     0x7f54c0a23dd8 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1256>
   0x00007f54c0a23c4e <+862>:   cmp    $0xffffffff,%eax
   0x00007f54c0a23c51 <+865>:   je     0x7f54c0a23c62 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+882>
   0x00007f54c0a23c53 <+867>:   lock subl $0x1,(%rdi)
   0x00007f54c0a23c57 <+871>:   mov    0x30(%rsp),%rdi
   0x00007f54c0a23c5c <+876>:   je     0x7f54c0a23dd8 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1256>
   0x00007f54c0a23c62 <+882>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a23c67 <+887>:   mov    (%rdi),%eax
   0x00007f54c0a23c69 <+889>:   test   %eax,%eax
   0x00007f54c0a23c6b <+891>:   je     0x7f54c0a23f10 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1568>
   0x00007f54c0a23c71 <+897>:   cmp    $0xffffffff,%eax
   0x00007f54c0a23c74 <+900>:   je     0x7f54c0a23c85 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+917>
   0x00007f54c0a23c76 <+902>:   lock subl $0x1,(%rdi)
   0x00007f54c0a23c7a <+906>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a23c7f <+911>:   je     0x7f54c0a23f10 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1568>
   0x00007f54c0a23c85 <+917>:   mov    %r13,%rdi
   0x00007f54c0a23c88 <+920>:   callq  0x7f54c0a21240
   0x00007f54c0a23c8d <+925>:   mov    %r15,%rdx
   0x00007f54c0a23c90 <+928>:   mov    %rbp,%rsi
   0x00007f54c0a23c93 <+931>:   mov    %rbx,%rdi
   0x00007f54c0a23c96 <+934>:   lea    0x3903(%rip),%rax        # 0x7f54c0a275a0
   0x00007f54c0a23c9d <+941>:   mov    %rax,0x28(%rsp)
   0x00007f54c0a23ca2 <+946>:   callq  0x7f54c0a1e820 <_ZN14QStandardPaths14findExecutableERK7QStringRK11QStringList@plt>
   0x00007f54c0a23ca7 <+951>:   mov    0x8(%rsp),%rax
   0x00007f54c0a23cac <+956>:   mov    0x30(%rsp),%rdx
   0x00007f54c0a23cb1 <+961>:   mov    %rax,0x30(%rsp)
   0x00007f54c0a23cb6 <+966>:   mov    %rdx,0x8(%rsp)
   0x00007f54c0a23cbb <+971>:   mov    (%rax),%edx
   0x00007f54c0a23cbd <+973>:   test   %edx,%edx
   0x00007f54c0a23cbf <+975>:   je     0x7f54c0a23f40 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1616>
   0x00007f54c0a23cc5 <+981>:   cmp    $0xffffffff,%edx
   0x00007f54c0a23cc8 <+984>:   je     0x7f54c0a23cd4 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+996>
   0x00007f54c0a23cca <+986>:   lock subl $0x1,(%rax)
   0x00007f54c0a23cce <+990>:   je     0x7f54c0a23f40 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1616>
   0x00007f54c0a23cd4 <+996>:   mov    0x28(%rsp),%rdi
   0x00007f54c0a23cd9 <+1001>:  mov    (%rdi),%eax
   0x00007f54c0a23cdb <+1003>:  test   %eax,%eax
   0x00007f54c0a23cdd <+1005>:  je     0x7f54c0a23f28 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1592>
   0x00007f54c0a23ce3 <+1011>:  cmp    $0xffffffff,%eax
   0x00007f54c0a23ce6 <+1014>:  je     0x7f54c0a23cf7 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1031>
   0x00007f54c0a23ce8 <+1016>:  lock subl $0x1,(%rdi)
   0x00007f54c0a23cec <+1020>:  mov    0x28(%rsp),%rdi
   0x00007f54c0a23cf1 <+1025>:  je     0x7f54c0a23f28 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1592>
   0x00007f54c0a23cf7 <+1031>:  mov    0x8(%rsp),%rax
   0x00007f54c0a23cfc <+1036>:  mov    0x4(%rax),%eax
   0x00007f54c0a23cff <+1039>:  test   %eax,%eax
   0x00007f54c0a23d01 <+1041>:  je     0x7f54c0a23f60 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1648>
   0x00007f54c0a23d07 <+1047>:  mov    %r15,%rdi
   0x00007f54c0a23d0a <+1050>:  callq  0x7f54c0a21240
   0x00007f54c0a23d0f <+1055>:  mov    0x2072ca(%rip),%rax        # 0x7f54c0c2afe0
   0x00007f54c0a23d16 <+1062>:  mov    %rbp,%rdi
   0x00007f54c0a23d19 <+1065>:  mov    %rbx,%rsi
   0x00007f54c0a23d1c <+1068>:  mov    %rax,0x28(%rsp)
   0x00007f54c0a23d21 <+1073>:  lea    0x3818(%rip),%rax        # 0x7f54c0a27540
   0x00007f54c0a23d28 <+1080>:  mov    %rax,0x30(%rsp)
   0x00007f54c0a23d2d <+1085>:  callq  0x7f54c0a242a0
   0x00007f54c0a23d32 <+1090>:  mov    0x30(%rsp),%rdi
   0x00007f54c0a23d37 <+1095>:  mov    (%rdi),%eax
   0x00007f54c0a23d39 <+1097>:  test   %eax,%eax
   0x00007f54c0a23d3b <+1099>:  je     0x7f54c0a23e28 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1336>
   0x00007f54c0a23d41 <+1105>:  cmp    $0xffffffff,%eax
   0x00007f54c0a23d44 <+1108>:  je     0x7f54c0a23d55 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1125>
   0x00007f54c0a23d46 <+1110>:  lock subl $0x1,(%rdi)
   0x00007f54c0a23d4a <+1114>:  mov    0x30(%rsp),%rdi
   0x00007f54c0a23d4f <+1119>:  je     0x7f54c0a23e28 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1336>
   0x00007f54c0a23d55 <+1125>:  mov    %r14,%rdi
   0x00007f54c0a23d58 <+1128>:  mov    %rbp,%rsi
   0x00007f54c0a23d5b <+1131>:  callq  0x7f54c0a1e250 <_ZN8QProcess7executeERK7QStringRK11QStringList@plt>
   0x00007f54c0a23d60 <+1136>:  mov    %rbp,%rdi
   0x00007f54c0a23d63 <+1139>:  callq  0x7f54c0a21240
   0x00007f54c0a23d68 <+1144>:  mov    0x8(%rsp),%rdi
   0x00007f54c0a23d6d <+1149>:  mov    (%rdi),%eax
   0x00007f54c0a23d6f <+1151>:  test   %eax,%eax
   0x00007f54c0a23d71 <+1153>:  je     0x7f54c0a23df0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1280>
   0x00007f54c0a23d73 <+1155>:  cmp    $0xffffffff,%eax
   0x00007f54c0a23d76 <+1158>:  je     0x7f54c0a23d83 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1171>
   0x00007f54c0a23d78 <+1160>:  lock subl $0x1,(%rdi)
   0x00007f54c0a23d7c <+1164>:  mov    0x8(%rsp),%rdi
   0x00007f54c0a23d81 <+1169>:  je     0x7f54c0a23df0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1280>
   0x00007f54c0a23d83 <+1171>:  mov    %r12,%rdi
   0x00007f54c0a23d86 <+1174>:  callq  0x7f54c0a1e1b0 <_ZN9QLockFileD1Ev@plt>
   0x00007f54c0a23d8b <+1179>:  jmpq   0x7f54c0a239a9 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+185>
   0x00007f54c0a23d90 <+1184>:  mov    $0x8,%edx
   0x00007f54c0a23d95 <+1189>:  mov    $0x2,%esi
   0x00007f54c0a23d9a <+1194>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23d9f <+1199>:  jmpq   0x7f54c0a23ae1 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+497>
   0x00007f54c0a23da4 <+1204>:  nopl   0x0(%rax)
   0x00007f54c0a23da8 <+1208>:  mov    $0x8,%edx
   0x00007f54c0a23dad <+1213>:  mov    $0x2,%esi
   0x00007f54c0a23db2 <+1218>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23db7 <+1223>:  jmpq   0x7f54c0a23abe <_ZN16KDEInitInterface20ensureKdeinitRunningEv+462>
   0x00007f54c0a23dbc <+1228>:  nopl   0x0(%rax)
   0x00007f54c0a23dc0 <+1232>:  mov    $0x8,%edx
   0x00007f54c0a23dc5 <+1237>:  mov    $0x2,%esi
   0x00007f54c0a23dca <+1242>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23dcf <+1247>:  jmpq   0x7f54c0a23b3e <_ZN16KDEInitInterface20ensureKdeinitRunningEv+590>
   0x00007f54c0a23dd4 <+1252>:  nopl   0x0(%rax)
   0x00007f54c0a23dd8 <+1256>:  mov    $0x8,%edx
   0x00007f54c0a23ddd <+1261>:  mov    $0x2,%esi
   0x00007f54c0a23de2 <+1266>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23de7 <+1271>:  jmpq   0x7f54c0a23c62 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+882>
   0x00007f54c0a23dec <+1276>:  nopl   0x0(%rax)
   0x00007f54c0a23df0 <+1280>:  mov    $0x8,%edx
   0x00007f54c0a23df5 <+1285>:  mov    $0x2,%esi
   0x00007f54c0a23dfa <+1290>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23dff <+1295>:  mov    %r12,%rdi
   0x00007f54c0a23e02 <+1298>:  callq  0x7f54c0a1e1b0 <_ZN9QLockFileD1Ev@plt>
   0x00007f54c0a23e07 <+1303>:  jmpq   0x7f54c0a239a9 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+185>
   0x00007f54c0a23e0c <+1308>:  nopl   0x0(%rax)
   0x00007f54c0a23e10 <+1312>:  mov    $0x8,%edx
   0x00007f54c0a23e15 <+1317>:  mov    $0x2,%esi
   0x00007f54c0a23e1a <+1322>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23e1f <+1327>:  jmpq   0x7f54c0a23bdb <_ZN16KDEInitInterface20ensureKdeinitRunningEv+747>
   0x00007f54c0a23e24 <+1332>:  nopl   0x0(%rax)
   0x00007f54c0a23e28 <+1336>:  mov    $0x8,%edx
   0x00007f54c0a23e2d <+1341>:  mov    $0x2,%esi
   0x00007f54c0a23e32 <+1346>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23e37 <+1351>:  jmpq   0x7f54c0a23d55 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1125>
   0x00007f54c0a23e3c <+1356>:  nopl   0x0(%rax)
   0x00007f54c0a23e40 <+1360>:  callq  0x7f54c0a24c50
   0x00007f54c0a23e45 <+1365>:  lea    0x20(%rsp),%r13
   0x00007f54c0a23e4a <+1370>:  mov    %rbx,%rsi
   0x00007f54c0a23e4d <+1373>:  mov    0x8(%rax),%rax
   0x00007f54c0a23e51 <+1377>:  mov    %r13,%rdi
   0x00007f54c0a23e54 <+1380>:  movq   $0x2,0x30(%rsp)
   0x00007f54c0a23e5d <+1389>:  movq   $0x0,0x38(%rsp)
   0x00007f54c0a23e66 <+1398>:  mov    %rax,0x48(%rsp)
   0x00007f54c0a23e6b <+1403>:  movq   $0x0,0x40(%rsp)
   0x00007f54c0a23e74 <+1412>:  callq  0x7f54c0a1e940 <_ZNK14QMessageLogger5debugEv@plt>
   0x00007f54c0a23e79 <+1417>:  mov    0x20(%rsp),%r12
   0x00007f54c0a23e7e <+1422>:  mov    $0x2a,%edx
   0x00007f54c0a23e83 <+1427>:  mov    %rbp,%rdi
   0x00007f54c0a23e86 <+1430>:  lea    0x3633(%rip),%rsi        # 0x7f54c0a274c0
   0x00007f54c0a23e8d <+1437>:  callq  0x7f54c0a1e580 <_ZN7QString15fromUtf8_helperEPKci@plt>
   0x00007f54c0a23e92 <+1442>:  mov    %r12,%rdi
   0x00007f54c0a23e95 <+1445>:  mov    %rbp,%rsi
   0x00007f54c0a23e98 <+1448>:  callq  0x7f54c0a1e860 <_ZN11QTextStreamlsERK7QString@plt>
   0x00007f54c0a23e9d <+1453>:  mov    0x28(%rsp),%rdi
   0x00007f54c0a23ea2 <+1458>:  mov    (%rdi),%eax
   0x00007f54c0a23ea4 <+1460>:  test   %eax,%eax
   0x00007f54c0a23ea6 <+1462>:  je     0x7f54c0a23f78 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1672>
   0x00007f54c0a23eac <+1468>:  cmp    $0xffffffff,%eax
   0x00007f54c0a23eaf <+1471>:  je     0x7f54c0a23ec0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1488>
   0x00007f54c0a23eb1 <+1473>:  lock subl $0x1,(%rdi)
   0x00007f54c0a23eb5 <+1477>:  mov    0x28(%rsp),%rdi
   0x00007f54c0a23eba <+1482>:  je     0x7f54c0a23f78 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1672>
   0x00007f54c0a23ec0 <+1488>:  mov    0x20(%rsp),%rdi
   0x00007f54c0a23ec5 <+1493>:  cmpb   $0x0,0x20(%rdi)
   0x00007f54c0a23ec9 <+1497>:  jne    0x7f54c0a23f90 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1696>
   0x00007f54c0a23ecf <+1503>:  mov    %r13,%rdi
   0x00007f54c0a23ed2 <+1506>:  callq  0x7f54c0a1e390 <_ZN6QDebugD1Ev@plt>
   0x00007f54c0a23ed7 <+1511>:  jmpq   0x7f54c0a23a29 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+313>
   0x00007f54c0a23edc <+1516>:  nopl   0x0(%rax)
   0x00007f54c0a23ee0 <+1520>:  mov    $0x8,%edx
   0x00007f54c0a23ee5 <+1525>:  mov    $0x2,%esi
   0x00007f54c0a23eea <+1530>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23eef <+1535>:  jmpq   0x7f54c0a23b84 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+660>
   0x00007f54c0a23ef4 <+1540>:  nopl   0x0(%rax)
   0x00007f54c0a23ef8 <+1544>:  mov    $0x8,%edx
   0x00007f54c0a23efd <+1549>:  mov    $0x2,%esi
   0x00007f54c0a23f02 <+1554>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23f07 <+1559>:  jmpq   0x7f54c0a23b61 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+625>
   0x00007f54c0a23f0c <+1564>:  nopl   0x0(%rax)
   0x00007f54c0a23f10 <+1568>:  mov    $0x8,%edx
   0x00007f54c0a23f15 <+1573>:  mov    $0x2,%esi
   0x00007f54c0a23f1a <+1578>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23f1f <+1583>:  jmpq   0x7f54c0a23c85 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+917>
   0x00007f54c0a23f24 <+1588>:  nopl   0x0(%rax)
   0x00007f54c0a23f28 <+1592>:  mov    $0x8,%edx
   0x00007f54c0a23f2d <+1597>:  mov    $0x2,%esi
   0x00007f54c0a23f32 <+1602>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23f37 <+1607>:  jmpq   0x7f54c0a23cf7 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1031>
   0x00007f54c0a23f3c <+1612>:  nopl   0x0(%rax)
   0x00007f54c0a23f40 <+1616>:  mov    0x30(%rsp),%rdi
   0x00007f54c0a23f45 <+1621>:  mov    $0x8,%edx
   0x00007f54c0a23f4a <+1626>:  mov    $0x2,%esi
   0x00007f54c0a23f4f <+1631>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23f54 <+1636>:  jmpq   0x7f54c0a23cd4 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+996>
   0x00007f54c0a23f59 <+1641>:  nopl   0x0(%rax)
   0x00007f54c0a23f60 <+1648>:  callq  0x7f54c0a24c50
   0x00007f54c0a23f65 <+1653>:  movzbl 0x11(%rax),%eax
   0x00007f54c0a23f69 <+1657>:  test   %al,%al
   0x00007f54c0a23f6b <+1659>:  jne    0x7f54c0a23fa0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1712>
   0x00007f54c0a23f6d <+1661>:  mov    %r15,%rdi
   0x00007f54c0a23f70 <+1664>:  jmpq   0x7f54c0a23d63 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1139>
   0x00007f54c0a23f75 <+1669>:  nopl   (%rax)
   0x00007f54c0a23f78 <+1672>:  mov    $0x8,%edx
   0x00007f54c0a23f7d <+1677>:  mov    $0x2,%esi
   0x00007f54c0a23f82 <+1682>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a23f87 <+1687>:  jmpq   0x7f54c0a23ec0 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1488>
   0x00007f54c0a23f8c <+1692>:  nopl   0x0(%rax)
   0x00007f54c0a23f90 <+1696>:  mov    $0x20,%esi
   0x00007f54c0a23f95 <+1701>:  callq  0x7f54c0a1e530 <_ZN11QTextStreamlsEc@plt>
   0x00007f54c0a23f9a <+1706>:  jmpq   0x7f54c0a23ecf <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1503>
   0x00007f54c0a23f9f <+1711>:  nop
   0x00007f54c0a23fa0 <+1712>:  callq  0x7f54c0a24c50
   0x00007f54c0a23fa5 <+1717>:  lea    0x18(%rsp),%r14
   0x00007f54c0a23faa <+1722>:  mov    %rbx,%rsi
   0x00007f54c0a23fad <+1725>:  mov    0x8(%rax),%rax
   0x00007f54c0a23fb1 <+1729>:  mov    %r14,%rdi
   0x00007f54c0a23fb4 <+1732>:  movq   $0x2,0x30(%rsp)
   0x00007f54c0a23fbd <+1741>:  movq   $0x0,0x38(%rsp)
   0x00007f54c0a23fc6 <+1750>:  mov    %rax,0x48(%rsp)
   0x00007f54c0a23fcb <+1755>:  movq   $0x0,0x40(%rsp)
   0x00007f54c0a23fd4 <+1764>:  callq  0x7f54c0a1e210 <_ZNK14QMessageLogger7warningEv@plt>
   0x00007f54c0a23fd9 <+1769>:  mov    0x18(%rsp),%rbx
   0x00007f54c0a23fde <+1774>:  mov    $0x26,%edx
   0x00007f54c0a23fe3 <+1779>:  mov    %rbp,%rdi
   0x00007f54c0a23fe6 <+1782>:  lea    0x3503(%rip),%rsi        # 0x7f54c0a274f0
   0x00007f54c0a23fed <+1789>:  callq  0x7f54c0a1e580 <_ZN7QString15fromUtf8_helperEPKci@plt>
   0x00007f54c0a23ff2 <+1794>:  mov    %rbx,%rdi
   0x00007f54c0a23ff5 <+1797>:  mov    %rbp,%rsi
   0x00007f54c0a23ff8 <+1800>:  callq  0x7f54c0a1e860 <_ZN11QTextStreamlsERK7QString@plt>
   0x00007f54c0a23ffd <+1805>:  mov    0x28(%rsp),%rdi
   0x00007f54c0a24002 <+1810>:  mov    (%rdi),%eax
   0x00007f54c0a24004 <+1812>:  test   %eax,%eax
   0x00007f54c0a24006 <+1814>:  je     0x7f54c0a24134 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2116>
   0x00007f54c0a2400c <+1820>:  cmp    $0xffffffff,%eax
   0x00007f54c0a2400f <+1823>:  je     0x7f54c0a24020 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1840>
   0x00007f54c0a24011 <+1825>:  lock subl $0x1,(%rdi)
   0x00007f54c0a24015 <+1829>:  mov    0x28(%rsp),%rdi
   0x00007f54c0a2401a <+1834>:  je     0x7f54c0a24134 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2116>
   0x00007f54c0a24020 <+1840>:  mov    0x18(%rsp),%rdi
   0x00007f54c0a24025 <+1845>:  cmpb   $0x0,0x20(%rdi)
   0x00007f54c0a24029 <+1849>:  jne    0x7f54c0a24166 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2166>
   0x00007f54c0a2402f <+1855>:  lea    0x34f2(%rip),%rsi        # 0x7f54c0a27528
   0x00007f54c0a24036 <+1862>:  mov    %r13,%rdi
   0x00007f54c0a24039 <+1865>:  callq  0x7f54c0a1e2f0 <_Z7qgetenvPKc@plt>
   0x00007f54c0a2403e <+1870>:  mov    0x20(%rsp),%rsi
   0x00007f54c0a24043 <+1875>:  xor    %ecx,%ecx
   0x00007f54c0a24045 <+1877>:  mov    %r14,%rdi
   0x00007f54c0a24048 <+1880>:  movslq 0x4(%rsi),%rdx
   0x00007f54c0a2404c <+1884>:  add    0x10(%rsi),%rsi
   0x00007f54c0a24050 <+1888>:  callq  0x7f54c0a1e520 <_ZN6QDebug12putByteArrayEPKcmNS_13Latin1ContentE@plt>
   0x00007f54c0a24055 <+1893>:  mov    0x18(%rsp),%rdi
   0x00007f54c0a2405a <+1898>:  cmpb   $0x0,0x20(%rdi)
   0x00007f54c0a2405e <+1902>:  jne    0x7f54c0a24157 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2151>
   0x00007f54c0a24064 <+1908>:  mov    $0x2,%ecx
   0x00007f54c0a24069 <+1913>:  lea    0x3528(%rip),%rdx        # 0x7f54c0a27598
   0x00007f54c0a24070 <+1920>:  mov    %r15,%rsi
   0x00007f54c0a24073 <+1923>:  mov    %rbp,%rdi
   0x00007f54c0a24076 <+1926>:  callq  0x7f54c0a1e890 <_ZN9QtPrivate16QStringList_joinEPK11QStringListPK5QChari@plt>
   0x00007f54c0a2407b <+1931>:  mov    0x28(%rsp),%rsi
   0x00007f54c0a24080 <+1936>:  mov    %r14,%rdi
   0x00007f54c0a24083 <+1939>:  mov    0x4(%rsi),%edx
   0x00007f54c0a24086 <+1942>:  add    0x10(%rsi),%rsi
   0x00007f54c0a2408a <+1946>:  callq  0x7f54c0a1e650 <_ZN6QDebug9putStringEPK5QCharm@plt>
   0x00007f54c0a2408f <+1951>:  mov    0x18(%rsp),%rdi
   0x00007f54c0a24094 <+1956>:  cmpb   $0x0,0x20(%rdi)
   0x00007f54c0a24098 <+1960>:  jne    0x7f54c0a24148 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2136>
   0x00007f54c0a2409e <+1966>:  mov    0x28(%rsp),%rdi
   0x00007f54c0a240a3 <+1971>:  mov    (%rdi),%eax
   0x00007f54c0a240a5 <+1973>:  test   %eax,%eax
   0x00007f54c0a240a7 <+1975>:  je     0x7f54c0a24123 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2099>
   0x00007f54c0a240a9 <+1977>:  cmp    $0xffffffff,%eax
   0x00007f54c0a240ac <+1980>:  je     0x7f54c0a240b9 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1993>
   0x00007f54c0a240ae <+1982>:  lock subl $0x1,(%rdi)
   0x00007f54c0a240b2 <+1986>:  mov    0x28(%rsp),%rdi
   0x00007f54c0a240b7 <+1991>:  je     0x7f54c0a24123 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2099>
   0x00007f54c0a240b9 <+1993>:  mov    0x34c1(%rip),%eax        # 0x7f54c0a27580
   0x00007f54c0a240bf <+1999>:  test   %eax,%eax
   0x00007f54c0a240c1 <+2001>:  je     0x7f54c0a2410b <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2075>
   0x00007f54c0a240c3 <+2003>:  cmp    $0xffffffff,%eax
   0x00007f54c0a240c6 <+2006>:  je     0x7f54c0a240d2 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2018>
   0x00007f54c0a240c8 <+2008>:  lock subl $0x1,0x34b0(%rip)        # 0x7f54c0a27580
   0x00007f54c0a240d0 <+2016>:  je     0x7f54c0a2410b <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2075>
   0x00007f54c0a240d2 <+2018>:  mov    0x20(%rsp),%rdi
   0x00007f54c0a240d7 <+2023>:  mov    (%rdi),%eax
   0x00007f54c0a240d9 <+2025>:  test   %eax,%eax
   0x00007f54c0a240db <+2027>:  je     0x7f54c0a240fa <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2058>
   0x00007f54c0a240dd <+2029>:  cmp    $0xffffffff,%eax
   0x00007f54c0a240e0 <+2032>:  je     0x7f54c0a240ed <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2045>
   0x00007f54c0a240e2 <+2034>:  lock subl $0x1,(%rdi)
   0x00007f54c0a240e6 <+2038>:  mov    0x20(%rsp),%rdi
   0x00007f54c0a240eb <+2043>:  je     0x7f54c0a240fa <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2058>
   0x00007f54c0a240ed <+2045>:  mov    %r14,%rdi
   0x00007f54c0a240f0 <+2048>:  callq  0x7f54c0a1e390 <_ZN6QDebugD1Ev@plt>
   0x00007f54c0a240f5 <+2053>:  jmpq   0x7f54c0a23f6d <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1661>
   0x00007f54c0a240fa <+2058>:  mov    $0x8,%edx
   0x00007f54c0a240ff <+2063>:  mov    $0x1,%esi
   0x00007f54c0a24104 <+2068>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a24109 <+2073>:  jmp    0x7f54c0a240ed <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2045>
   0x00007f54c0a2410b <+2075>:  mov    $0x8,%edx
   0x00007f54c0a24110 <+2080>:  mov    $0x2,%esi
   0x00007f54c0a24115 <+2085>:  lea    0x3464(%rip),%rdi        # 0x7f54c0a27580
   0x00007f54c0a2411c <+2092>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a24121 <+2097>:  jmp    0x7f54c0a240d2 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+2018>
   0x00007f54c0a24123 <+2099>:  mov    $0x8,%edx
   0x00007f54c0a24128 <+2104>:  mov    $0x2,%esi
   0x00007f54c0a2412d <+2109>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a24132 <+2114>:  jmp    0x7f54c0a240b9 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1993>
   0x00007f54c0a24134 <+2116>:  mov    $0x8,%edx
   0x00007f54c0a24139 <+2121>:  mov    $0x2,%esi
   0x00007f54c0a2413e <+2126>:  callq  0x7f54c0a1e8a0 <_ZN10QArrayData10deallocateEPS_mm@plt>
   0x00007f54c0a24143 <+2131>:  jmpq   0x7f54c0a24020 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1840>
   0x00007f54c0a24148 <+2136>:  mov    $0x20,%esi
   0x00007f54c0a2414d <+2141>:  callq  0x7f54c0a1e530 <_ZN11QTextStreamlsEc@plt>
   0x00007f54c0a24152 <+2146>:  jmpq   0x7f54c0a2409e <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1966>
   0x00007f54c0a24157 <+2151>:  mov    $0x20,%esi
   0x00007f54c0a2415c <+2156>:  callq  0x7f54c0a1e530 <_ZN11QTextStreamlsEc@plt>
   0x00007f54c0a24161 <+2161>:  jmpq   0x7f54c0a24064 <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1908>
   0x00007f54c0a24166 <+2166>:  mov    $0x20,%esi
   0x00007f54c0a2416b <+2171>:  callq  0x7f54c0a1e530 <_ZN11QTextStreamlsEc@plt>
   0x00007f54c0a24170 <+2176>:  jmpq   0x7f54c0a2402f <_ZN16KDEInitInterface20ensureKdeinitRunningEv+1855>
   0x00007f54c0a24175 <+2181>:  callq  0x7f54c0a1e5a0 <__stack_chk_fail@plt>
End of assembler dump.

I think I know what is happening. This line

QDeadlineTimer timer(qMax(timeout, -1)); // QDT only takes -1 as "forever"

passes the result of qMax() to QDeadlineTimer's constructor. That constructor receives a quint64. Since qMax() is a template:

inline const T &qMax(const T &a, const T &b) { return (a < b) ? b : a; }

it will use the type of the assigned variable (quint64 in this case) as T and casting -1 to INT64_MAX. Changing the line to:

QDeadlineTimer timer(qMax(timeout, qint64(-1)));

should solve the problem. If it does not then this should work:

qint64 maxTimeout = qMax(timeout, -1);
QDeadlineTimer timer(maxTimeout);

Quickly checking on openSUSE Tumbleweed

I think I know what is happening. This line

QDeadlineTimer timer(qMax(timeout, -1)); // QDT only takes -1 as "forever"

passes the result of qMax() to QDeadlineTimer's constructor. That constructor receives a quint64. Since qMax() is a template:

The constructor takes a qint64, not a quint64.

inline const T &qMax(const T &a, const T &b) { return (a < b) ? b : a; }

it will use the type of the assigned variable (quint64 in this case) as T and casting -1 to INT64_MAX. Changing the line to:

Again, incorrect. It will use the type T, which must be the same for both arguments. The timeout parameter is int and the -1 literal is int. So the comparison is performed in int, which should return 0.

(gdb) disass
Dump of assembler code for function _ZN9QLockFile7tryLockEi:
   0x00007f54be8bc752 <+2>:     mov    $0xffffffff,%eax
...
   0x00007f54be8bc76d <+29>:    test   %esi,%esi
...
   0x00007f54be8bc772 <+34>:    cmovs  %eax,%esi
...
   0x00007f54be8bc78c <+60>:    movslq %esi,%rsi
   0x00007f54be8bc78f <+63>:    callq  0x7f54be962150 <QDeadlineTimer::QDeadlineTimer(long long, Qt::TimerType)>

This is entirely correct: in +29 it checks parameter (in %esi) and in +34 if it has the sign bit set (read: is negative), moves -1 to it. Then it does a sign extension from 32- to 64-bit in +60, before placing the call.

qMax is working properly.

Dump of assembler code for function _ZN16KDEInitInterface20ensureKdeinitRunningEv:
...
   0x00007f54c0a23ae1 <+497>:   xor    %esi,%esi
   0x00007f54c0a23ae3 <+499>:   mov    %r12,%rdi
   0x00007f54c0a23ae6 <+502>:   callq  0x7f54c0a1e960 <_ZN9QLockFile7tryLockEi@plt>

Also correct: this passed a zero as the parameter to tryLock().

Now here's the interesting thing:

   0x00007f54c0a23aeb <+507>:   test   %al,%al
   0x00007f54c0a23aed <+509>:   jne    0x7f54c0a23b8d <_ZN16KDEInitInterface20ensureKdeinitRunningEv+669>
   0x00007f54c0a23af3 <+515>:   mov    %r12,%rdi
   0x00007f54c0a23af6 <+518>:   callq  0x7f54c0a1e9c0 <_ZN9QLockFile4lockEv@plt>
=> 0x00007f54c0a23afb <+523>:   mov    %rbx,%rdi

Note where the => is pointing to. It's not to the return from tryLock(), but to the return to lock(). We've been looking at the wrong line.

That also means the patch doesn't make sense, because it's changing the line that is already working.

thiago added inline comments.Jul 24 2018, 6:56 PM
src/kdeinitinterface.cpp
45

This line doesn't need changing. You're getting a tryLock() failure because the lock file already exists. Adding a 5 second timeout is not going to change that.

46–52

The problem is here. So we failed to lock, then we try again to lock, forever. Why is this code doing that?

jtamate updated this revision to Diff 38372.Jul 25 2018, 6:35 AM
jtamate edited the summary of this revision. (Show Details)
jtamate edited the test plan for this revision. (Show Details)

It is my first time of a backtrace that doesn't reflect the true state of a program. But I've learned the lesson, in case of counter intuitive backtrace, take a look at the dissasembler.
Thanks everybody, specially to @thiago.

The idea of the old code was: if I can't get the lock, then someone else is already in the process of starting kdeinit, so I'll just wait for that to happen, by locking again, i.e. blocking on purpose, and then checking that the DBus name is up, i.e. the other process did manage to do it successfully.

I can't wrap my head around whatever the new code is trying to do instead.

I said from the start that it wasn't tryLock() that was blocking but lock(), good to see that this is now confirmed, however we're back to square one: why is lock never returning? Surely the other process which is executing this method is releasing the lock after the QProcess::execute, right?

jtamate updated this revision to Diff 38387.Jul 25 2018, 8:24 AM
jtamate edited the summary of this revision. (Show Details)

I said from the start that it wasn't tryLock() that was blocking but lock(), good to see that this is now confirmed.

I trusted blindly in gdb stacktrace, and also I didn't understood, again, the code.

Added your description as comments.

dfaure requested changes to this revision.Jul 25 2018, 8:55 AM

The comments look good. The actual change, not so much ;)

src/kdeinitinterface.cpp
77

But that means the other processes coming into this method, will either succeed in tryLock() and will run yet another kdeinit instance (your system is slow and you're bombarding it with kdeinit processes trying to start at the same time?),
or worse, tryLock() fails and lock() succeeds (because the first process released the lock too early here), and then isServiceRegistered fails (because we're trying too early), and again we start yet another kdeinit process that will fight it with the currently starting one.

If the bug is that kdeinit takes forever to start (not just a long time) and QProcess::execute never returns, then that's the actual bug. This proposed change is just a workaround which potentially makes things worse (10 kdeinit processes attempting to start at the same time).

BTW ~QProcess would kill kdeinit, what you meant was startDetached. But all of the above is the reasoning against startDetached, actually ;)

This revision now requires changes to proceed.Jul 25 2018, 8:55 AM
jtamate updated this revision to Diff 38403.Jul 25 2018, 10:15 AM
jtamate edited the summary of this revision. (Show Details)

Don't wait forever, if the lock is blocked for more than 30 seconds, write a warning and don't try to start kdeinit5 again.

dfaure accepted this revision.Jul 25 2018, 10:26 AM

That's reasonable. Still when you see this warning in the future, it would be useful to find out what kdeinit+klauncher are actually doing, if klauncher doesn't manage to register with DBus after 30 seconds...

This revision is now accepted and ready to land.Jul 25 2018, 10:26 AM
This revision was automatically updated to reflect the committed changes.

The idea of the old code was: if I can't get the lock, then someone else is already in the process of starting kdeinit, so I'll just wait for that to happen, by locking again, i.e. blocking on purpose, and then checking that the DBus name is up, i.e. the other process did manage to do it successfully.

It's Kind of silly to tryLock() then lock(). Why not just lock()? Was it the optimisation to avoid the D-Bus call? If so, a comment would be warranted.

I said from the start that it wasn't tryLock() that was blocking but lock(), good to see that this is now confirmed, however we're back to square one: why is lock never returning? Surely the other process which is executing this method is releasing the lock after the QProcess::execute, right?

Yeah, I trusted the patch too. The frame for lock() is missing because it's a tail-call jump.

Anyway, one theory for why the lock file is still present: it's stale from a previous boot, but the PID is taken by some process in the current boot. This is fixed in Qt 5.11 by saving the boot ID (commit 772863355a0cf57a49e93608790dfd17c8fd82da). So question to @jtamate , what Qt version is this? Can you paste here the contents of the lock file itself, as well as what process (if any) the PID in that file points to.

The idea of the old code was: if I can't get the lock, then someone else is already in the process of starting kdeinit, so I'll just wait for that to happen, by locking again, i.e. blocking on purpose, and then checking that the DBus name is up, i.e. the other process did manage to do it successfully.

It's Kind of silly to tryLock() then lock(). Why not just lock()? Was it the optimisation to avoid the D-Bus call? If so, a comment would be warranted.

Yes: it would be kind of silly to check the dbus servicename, get the lock (because nobody else is doing this), and then check the dbus service name again, what chance did that have to suddenly pass?

I think the new set of comments explains quite clearly the logic, now.

Anyway, one theory for why the lock file is still present: it's stale from a previous boot, but the PID is taken by some process in the current boot. This is fixed in Qt 5.11 by saving the boot ID (commit 772863355a0cf57a49e93608790dfd17c8fd82da). So question to @jtamate , what Qt version is this? Can you paste here the contents of the lock file itself, as well as what process (if any) the PID in that file points to.

Good point.

Qt 5.11.0 and frameworks 5.46.0 over xcb.
I'm sorry, I'll have to wait until the next lock, I didn't find the lock file neither the blocked kdeinit5.
Is the complete name of the lock file be logged with qCDebug() ?.
Just after killing dolphin yesterday afternoon (I've read your comments this morning), clementine appeared suddenly playing a song.