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.
Details
- Reviewers
dfaure thiago - Group Reviewers
Frameworks - Commits
- R271:8097e1aa0d21: Don't block forever in ensureKdeinitRunning
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
Lint Skipped - Unit
Unit Tests Skipped
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.).
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 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?
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?
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;
(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
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.
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
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.
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.
src/kdeinitinterface.cpp | ||
---|---|---|
45–46 | 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. | |
47–48 | The problem is here. So we failed to lock, then we try again to lock, forever. Why is this code doing that? |
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?
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.
The comments look good. The actual change, not so much ;)
src/kdeinitinterface.cpp | ||
---|---|---|
72 | 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?), 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 ;) |
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.
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...
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.
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.