Summary: | Marble and Qt 4.8 don't play well together | ||
---|---|---|---|
Product: | [Applications] marble | Reporter: | Émeric Letavernier <emeric.letavernier> |
Component: | general | Assignee: | marble-bugs |
Status: | RESOLVED FIXED | ||
Severity: | major | CC: | jjm, nienhueser, shentey |
Priority: | HI | ||
Version: | unspecified | ||
Target Milestone: | 1.3 (KDE 4.8) | ||
Platform: | Arch Linux | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | 1.3.0 | |
Sentry Crash Report: |
Description
Émeric Letavernier
2011-12-09 23:44:30 UTC
I just tested both OpenRouteService and Yours which work fine in latest master. At which location are you trying to calculate a route? OpenRouteService is limited to Europe, and Yours sometimes just times out. Please also check that Marble is not set to offline mode, in which both wouldn't work. Do you have the monav-routing-daemon and maps for it installed? I tested again with OpenRouteService, offline mode disabled. Same result as above. I'm in France and it used to work perfectly well. I just tried with a test user to check again if there's a link with conf files, same result. Additionnally, after having waited for a while, if i quit, marble crashes and judging by the call stack, it's stuck somewhere in routing service. http://pastebin.archlinux.fr/434957 I downgraded to the 4.7.4 version of marble : works again. Upgraded back to 4.7.90 : the bug is back. So, if nothing should have clearly changed between the two versions concerning routing service, i suppose it's a packaging bug. I'll check again in the archlinux community. Any news here? :-) Are you using Qt 4.8? *** Bug 290714 has been marked as a duplicate of this bug. *** First investigations with Qt 4.8 installed here shows that the majority of runners (which run in threads) keep running until their timeout of 30 seconds for a yet unknown reason. Since the number of threads executed in parallel is limited, jobs block each other. This is noticeable especially on startup, where more than a dozen of threads are started to load placemarks etc. This is done in 1-2 seconds with Qt 4.7, while the threads blocking each other with Qt 4.8 extend this to several minutes. While the UI keeps responsive, all runner related tasks take a very long time after startup to work. That are reverse geocoding, searching, routing and parsing. Seems to be caused by the wrong assumption in runTask( &localEventLoop ); [...] localEventLoop.exec(); that runner() is not yet finished when executing the event loop. This does not hold true for short running threads and the problem seems to occur more likely with Qt 4.8. Hence the local event loop waits for an event that already happened until the watchdog terminates it. Git commit 9e833bed58de665115ff9e2ea2c1e056144c288a by Bernhard Beschow. Committed on 16/01/2012 at 20:01. Pushed by beschow into branch 'master'. instantiate event loops in runner plugins rather than in RunnerTask and instantiate runners in background threads Instantiating the event loops in the runner plugins rather than in RunnerTask resolves weired usage of QEventLoop: The synchronous runners were finished before QEventLoop::exec() was called. Somehow the finished signal of the runners still managed to quit the loop, such that exec() wouldn't block. Until Qt 4.8 we might just have been lucky... Instantiating runners in the background thread avoids thread affinity issues wrt. to QEventLoop. In particular, QEventLoop instances would block a background thread forever because calling quit() or exit() wouldn't cause exec() to return. REVIEw: 103711 M +5 -23 src/lib/MarbleRunnerManager.cpp M +57 -44 src/lib/RunnerTask.cpp M +33 -16 src/lib/RunnerTask.h M +7 -0 src/plugins/runner/hostip/HostipRunner.cpp M +14 -0 src/plugins/runner/nominatim/OsmNominatimRunner.cpp M +7 -0 src/plugins/runner/openrouteservice/OpenRouteServiceRunner.cpp M +8 -0 src/plugins/runner/yours/YoursRunner.cpp M +83 -20 tests/MarbleRunnerManagerTest.cpp http://commits.kde.org/marble/9e833bed58de665115ff9e2ea2c1e056144c288a Works perfectly here with KDE 4.8 RC2+ and Qt 4.8.0, many thanks for the fix! Git commit 4957d88eba144f775493d2b95db1788070cfe53a by Bernhard Beschow. Committed on 16/01/2012 at 20:01. Pushed by beschow into branch 'KDE/4.8'. instantiate event loops in runner plugins rather than in RunnerTask and instantiate runners in background threads Instantiating the event loops in the runner plugins rather than in RunnerTask resolves weired usage of QEventLoop: The synchronous runners were finished before QEventLoop::exec() was called. Somehow the finished signal of the runners still managed to quit the loop, such that exec() wouldn't block. Until Qt 4.8 we might just have been lucky... Instantiating runners in the background thread avoids thread affinity issues wrt. to QEventLoop. In particular, QEventLoop instances would block a background thread forever because calling quit() or exit() wouldn't cause exec() to return. FIXED-IN: 1.3.0 REVIEW: 103711 M +9 -22 src/lib/MarbleRunnerManager.cpp M +57 -44 src/lib/RunnerTask.cpp M +33 -16 src/lib/RunnerTask.h M +7 -0 src/plugins/runner/hostip/HostipRunner.cpp M +14 -0 src/plugins/runner/nominatim/OsmNominatimRunner.cpp M +7 -0 src/plugins/runner/openrouteservice/OpenRouteServiceRunner.cpp M +8 -0 src/plugins/runner/yours/YoursRunner.cpp http://commits.kde.org/marble/4957d88eba144f775493d2b95db1788070cfe53a There's a regression in OsmNominatimRunner: When I open Marble now with a route that gets restored, it segfaults during startup most of the time when doing a reverse geocoding call for the via points of the restored route. Backtrace below: [New Thread 0xb60ffb70 (LWP 13112)] Thread 22 (Thread 0xb60ffb70 (LWP 13112)): #0 0x001110c2 in ?? () from /lib/ld-linux.so.2 No symbol table info available. #1 0x016b55e3 in __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/lowlevellock.S:95 No locals. #2 0x016afc02 in _L_lock_2951 () from /lib/i386-linux-gnu/libpthread.so.0 No symbol table info available. #3 0x016aef1d in start_thread (arg=0xb60ffb70) at pthread_create.c:295 oldtype = 0 pd = 0xb60ffb70 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {23855092, 0, 4001536, -1240468408, 1997540319, -1121138511}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = -512 robust = <optimized out> pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #4 0x015fe0ce in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 No locals. Backtrace stopped: Not enough registers or memory available to unwind further Thread 17 (Thread 0xb58feb70 (LWP 13107)): #0 0x001110c2 in ?? () from /lib/ld-linux.so.2 No symbol table info available. #1 0x015ef40e in __GI___poll (fds=0xb4ab2160, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:87 resultvar = <optimized out> oldtype = -516 result = <optimized out> #2 0x0173e34b in g_poll () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #3 0x0172f896 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #4 0x0172fc2a in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #5 0x002c4ada in QEventDispatcherGlib::processEvents (this=0x9097040, flags=...) at kernel/qeventdispatcher_glib.cpp:422 d = 0x83606c0 canWait = true savedFlags = {i = 0} result = <optimized out> #6 0x002951dd in QEventLoop::processEvents (this=0xb58fe2c0, flags=...) at kernel/qeventloop.cpp:149 d = 0xb4ab2100 #7 0x00295421 in QEventLoop::exec (this=0xb58fe2c0, flags=...) at kernel/qeventloop.cpp:201 d = 0xb4ab2100 app = 0xb58fe28c #8 0x0019890b in QThread::exec (this=0x94afdb0) at thread/qthread.cpp:498 d = 0x94c5810 locker = {val = 155998304} eventLoop = {<QObject> = {_vptr.QObject = 0x3cd448, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x358580 "QObject", data = 0x358620, extradata = 0x3c83a0}}, d_ptr = {d = 0xb4ab2100}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x3610e0 "Qt", data = 0x3649a0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x3c8390, stringdata = 0x36a8c0 "QEventLoop", data = 0x36a8e0, extradata = 0x0}}} returnCode = <optimized out> #9 0x04e60187 in Marble::GpsdThread::run (this=0x94afdb0) at /home/dennis/marble/src-git/src/plugins/positionprovider/gpsd/GpsdThread.cpp:40 No locals. #10 0x0019b7b3 in QThreadPrivate::start (arg=0x94afdb0) at thread/qthread_unix.cpp:331 __clframe = {__cancel_routine = 0x19a660 <QThreadPrivate::finish(void*)>, __cancel_arg = 0x94afdb0, __do_it = 1, __cancel_type = <optimized out>} thr = 0x94afdb0 data = 0x80d1688 #11 0x016aed31 in start_thread (arg=0xb58feb70) at pthread_create.c:304 __res = <optimized out> pd = 0xb58feb70 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {23855092, 0, 4001536, -1248861112, 1999637464, -1121138511}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = <optimized out> robust = <optimized out> pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #12 0x015fe0ce in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 No locals. Backtrace stopped: Not enough registers or memory available to unwind further Thread 12 (Thread 0xb1efbb70 (LWP 13102)): #0 clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:111 No locals. #1 0x00000001 in ?? () No symbol table info available. #2 0xb60ffb70 in ?? () No symbol table info available. #3 0x00000000 in ?? () No symbol table info available. Thread 11 (Thread 0xb26fcb70 (LWP 13101)): #0 QMutex::lock (this=0x80a9c90) at thread/qmutex.cpp:151 self = <optimized out> isLocked = <optimized out> #1 0x00198a2f in QMutexLocker (m=0x80a9c90, this=0xb26fb95c) at thread/qmutex.h:102 No locals. #2 QThread::exit (this=0xb3f00800, returnCode=0) at thread/qthread.cpp:530 d = 0x80a9c40 locker = {val = 5} #3 0x00198ad3 in QThread::quit (this=0xb3f00800) at thread/qthread.cpp:550 No locals. #4 0x00f1f5ec in QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate (this=0xb3f007f0, __in_chrg=<optimized out>) at bearer/qnetworkconfigmanager_p.cpp:85 locker = {val = 3018852353} #5 0x00f1f752 in QNetworkConfigurationManagerPrivate::~QNetworkConfigurationManagerPrivate (this=0xb3f007f0, __in_chrg=<optimized out>) at bearer/qnetworkconfigmanager_p.cpp:86 No locals. #6 0x00f1d1ab in connManager () at bearer/qnetworkconfigmanager.cpp:75 x = 0xb3f007f0 #7 0x00f1d385 in QNetworkConfigurationManager::QNetworkConfigurationManager (this=0xb26fbb14, parent=0x0) at bearer/qnetworkconfigmanager.cpp:206 priv = <optimized out> #8 0x00eee569 in QNetworkAccessManager::createRequest (this=0xb3f0af90, op=QNetworkAccessManager::GetOperation, req=..., outgoingData=0x0) at access/qnetworkaccessmanager.cpp:1004 manager = {<QObject> = {_vptr.QObject = 0xfcf4c8, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x358580 "QObject", data = 0x358620, extradata = 0x3c83a0}}, d_ptr = {d = 0xb3f0bdf0}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x3610e0 "Qt", data = 0x3649a0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x3c8390, stringdata = 0xf90960 "QNetworkConfigurationManager", data = 0xf90a40, extradata = 0x0}}} request = {d = {d = 0x14d080f}} url = {d = 0x2a9d89} reply = 0x1 priv = 0xb26fbb14 proxyList = {{p = {static shared_null = {ref = {_q_value = 1}, alloc = 0, begin = 0, end = 0, sharable = 1, array = {0x0}}, d = 0xb3f6f108}, d = 0xb3f6f108}} #9 0x00eea788 in QNetworkAccessManager::get (this=0xb3f0af90, request=...) at access/qnetworkaccessmanager.cpp:690 No locals. #10 0x04fcd27a in Marble::OsmNominatimRunner::startReverseGeocoding (this=0xb4ab1e80) at /home/dennis/marble/src-git/src/plugins/runner/nominatim/OsmNominatimRunner.cpp:112 reply = 0xb3f00010 #11 0x04fcf54b in Marble::OsmNominatimRunner::qt_metacall (this=0xb4ab1e80, _c=QMetaObject::InvokeMetaMethod, _id=6, _a=0xb3f66378) at /home/dennis/marble/build-git/src/plugins/runner/nominatim/OsmNominatimRunner.moc:89 No locals. #12 0x0029cb7d in metacall (argv=0xb3f66378, idx=15, cl=QMetaObject::InvokeMetaMethod, object=0xb4ab1e80) at kernel/qmetaobject.cpp:237 No locals. #13 QMetaObject::metacall (object=0xb4ab1e80, cl=QMetaObject::InvokeMetaMethod, idx=15, argv=0xb3f66378) at kernel/qmetaobject.cpp:232 No locals. #14 0x002a7685 in QMetaCallEvent::placeMetaCall (this=0xb3f664c0, object=0xb4ab1e80) at kernel/qobject.cpp:535 No locals. #15 0x002aeb52 in QObject::event (this=0xb4ab1e80, e=0xb3f664c0) at kernel/qobject.cpp:1217 mce = 0xb3f664c0 currentSender = {sender = 0x0, signal = -1, ref = 1} previousSender = 0x0 #16 0x00528d84 in notify_helper (e=0xb3f664c0, receiver=0xb4ab1e80, this=0x80c6e80) at kernel/qapplication.cpp:4486 consumed = <optimized out> #17 QApplicationPrivate::notify_helper (this=0x80c6e80, receiver=0xb4ab1e80, e=0xb3f664c0) at kernel/qapplication.cpp:4458 No locals. #18 0x0052e133 in QApplication::notify (this=0xb3f664c0, receiver=0xb4ab1e80, e=0xb3f664c0) at kernel/qapplication.cpp:3886 res = true #19 0x0029619e in QCoreApplication::notifyInternal (this=0xbffff558, receiver=0xb4ab1e80, event=0xb3f664c0) at kernel/qcoreapplication.cpp:787 threadData = 0x9025a60 returnValue = <optimized out> result = false cbdata = {0xb4ab1e80, 0xb3f664c0, 0xb26fbf5f} d = <optimized out> #20 0x00299f93 in sendEvent (event=<optimized out>, receiver=<optimized out>) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:215 No locals. #21 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x9025a60) at kernel/qcoreapplication.cpp:1428 e = 0xb3f664c0 r = 0xb4ab1e80 locker = {val = 151149192} startOffset = 0 #22 0x0029a0ec in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at kernel/qcoreapplication.cpp:1321 data = <optimized out> #23 0x002c46a4 in sendPostedEvents () at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:220 No locals. #24 postEventSourceDispatch (s=0xb3f01a30) at kernel/qeventdispatcher_glib.cpp:277 source = 0xb3f01a30 #25 0x0172f25f in g_main_context_dispatch () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #26 0x0172f990 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #27 0x0172fc2a in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #28 0x002c4ada in QEventDispatcherGlib::processEvents (this=0x8e264b0, flags=...) at kernel/qeventdispatcher_glib.cpp:422 d = 0x9025e88 canWait = true savedFlags = {i = 0} result = <optimized out> #29 0x002951dd in QEventLoop::processEvents (this=0xb26fc218, flags=...) at kernel/qeventloop.cpp:149 d = 0xb3f665d8 #30 0x00295421 in QEventLoop::exec (this=0xb26fc218, flags=...) at kernel/qeventloop.cpp:201 d = 0xb3f665d8 app = 0xb26fc1bc #31 0x04fcd08e in Marble::OsmNominatimRunner::reverseGeocoding (this=0xb4ab1e80, coordinates=...) at /home/dennis/marble/src-git/src/plugins/runner/nominatim/OsmNominatimRunner.cpp:100 lon = 8.4157548558999995 lat = 49.002245796899999 url = {static null = {<No data fields>}, static shared_null = {ref = {_q_value = 1}, alloc = 0, size = 0, data = 0x80a9bd2, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 54}, alloc = 0, size = 0, data = 0x3cff9e, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0xb3f00468, static codecForCStrings = 0x0} base = {static null = {<No data fields>}, static shared_null = {ref = {_q_value = 1}, alloc = 0, size = 0, data = 0x80a9bd2, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 54}, alloc = 0, size = 0, data = 0x3cff9e, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0xb000d098, static codecForCStrings = 0x0} query = {static null = {<No data fields>}, static shared_null = {ref = {_q_value = 1}, alloc = 0, size = 0, data = 0x80a9bd2, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 54}, alloc = 0, size = 0, data = 0x3cff9e, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0xb3f155b0, static codecForCStrings = 0x0} eventLoop = {<QObject> = {_vptr.QObject = 0x3cd448, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x358580 "QObject", data = 0x358620, extradata = 0x3c83a0}}, d_ptr = {d = 0xb3f665d8}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x3610e0 "Qt", data = 0x3649a0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x3c8390, stringdata = 0x36a8c0 "QEventLoop", data = 0x36a8e0, extradata = 0x0}}} #32 0x012d8c2c in Marble::ReverseGeocodingTask::runTask (this=0x97eadf8) at /home/dennis/marble/src-git/src/lib/RunnerTask.cpp:80 runner = 0xb4ab1e80 #33 0x012d9172 in Marble::RunnerTask::run (this=0x97eadf8) at /home/dennis/marble/src-git/src/lib/RunnerTask.cpp:33 No locals. #34 0x0018f651 in QThreadPoolThread::run (this=0xb6193ca8) at concurrent/qthreadpool.cpp:106 r = 0x97eae00 expired = <optimized out> locker = {val = 3065004664} #35 0x0019b7b3 in QThreadPrivate::start (arg=0xb6193ca8) at thread/qthread_unix.cpp:331 __clframe = {__cancel_routine = 0x19a660 <QThreadPrivate::finish(void*)>, __cancel_arg = 0xb6193ca8, __do_it = 1, __cancel_type = <optimized out>} thr = 0xb6193ca8 data = 0x9025a60 #36 0x016aed31 in start_thread (arg=0xb26fcb70) at pthread_create.c:304 __res = <optimized out> pd = 0xb26fcb70 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {23855092, 0, 4001536, -1301298104, -1217393705, -1121138511}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = <optimized out> robust = <optimized out> pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #37 0x015fe0ce in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 No locals. Backtrace stopped: Not enough registers or memory available to unwind further Thread 10 (Thread 0xb36feb70 (LWP 13099)): #0 0x001110c2 in ?? () from /lib/ld-linux.so.2 No symbol table info available. #1 0x016b2e04 in pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_timedwait.S:236 No locals. #2 0x0160bd54 in __pthread_cond_timedwait (cond=0xb6b04330, mutex=0xb6b04318, abstime=0xb36fe2b8) at forward.c:152 __p = <optimized out> #3 0x0019bc4e in wait (time=30000, this=0xb6b04318) at thread/qwaitcondition_unix.cpp:86 tv = {tv_sec = 1326915066, tv_usec = 643756} ti = {tv_sec = 1326915096, tv_nsec = 643756000} code = <optimized out> #4 QWaitCondition::wait (this=0xb6b0427c, mutex=0xb6b04278, time=30000) at thread/qwaitcondition_unix.cpp:160 returnValue = 24 #5 0x0018f6e4 in QThreadPoolThread::run (this=0xb6193a70) at concurrent/qthreadpool.cpp:140 r = 0x8f6d818 expired = <optimized out> locker = {val = 3065004665} #6 0x0019b7b3 in QThreadPrivate::start (arg=0xb6193a70) at thread/qthread_unix.cpp:331 __clframe = {__cancel_routine = 0x19a660 <QThreadPrivate::finish(void*)>, __cancel_arg = 0xb6193a70, __do_it = 1, __cancel_type = <optimized out>} thr = 0xb6193a70 data = 0xb6193940 #7 0x016aed31 in start_thread (arg=0xb36feb70) at pthread_create.c:304 __res = <optimized out> pd = 0xb36feb70 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {23855092, 0, 4001536, -1284512696, -1221588011, -1121138511}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = <optimized out> robust = <optimized out> pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #8 0x015fe0ce in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 No locals. Backtrace stopped: Not enough registers or memory available to unwind further Thread 7 (Thread 0xb48fcb70 (LWP 13097)): #0 0x001110c2 in ?? () from /lib/ld-linux.so.2 No symbol table info available. #1 0x016b2e04 in pthread_cond_timedwait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/i386/i686/../i486/pthread_cond_timedwait.S:236 No locals. #2 0x0160bd54 in __pthread_cond_timedwait (cond=0xb6b04330, mutex=0xb6b04318, abstime=0xb48fc2b8) at forward.c:152 __p = <optimized out> #3 0x0019bc4e in wait (time=30000, this=0xb6b04318) at thread/qwaitcondition_unix.cpp:86 tv = {tv_sec = 1326915066, tv_usec = 908051} ti = {tv_sec = 1326915096, tv_nsec = 908051000} code = <optimized out> #4 QWaitCondition::wait (this=0xb6b0427c, mutex=0xb6b04278, time=30000) at thread/qwaitcondition_unix.cpp:160 returnValue = 24 #5 0x0018f6e4 in QThreadPoolThread::run (this=0x8f70c68) at concurrent/qthreadpool.cpp:140 r = 0x8f7ab90 expired = <optimized out> locker = {val = 3065004665} #6 0x0019b7b3 in QThreadPrivate::start (arg=0x8f70c68) at thread/qthread_unix.cpp:331 __clframe = {__cancel_routine = 0x19a660 <QThreadPrivate::finish(void*)>, __cancel_arg = 0x8f70c68, __do_it = 1, __cancel_type = <optimized out>} thr = 0x8f70c68 data = 0x9002178 #7 0x016aed31 in start_thread (arg=0xb48fcb70) at pthread_create.c:304 __res = <optimized out> pd = 0xb48fcb70 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {23855092, 0, 4001536, -1265646520, 2003831770, -1121138511}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = <optimized out> robust = <optimized out> pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #8 0x015fe0ce in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 No locals. Backtrace stopped: Not enough registers or memory available to unwind further Thread 3 (Thread 0xb6affb70 (LWP 13093)): #0 0x001110c2 in ?? () from /lib/ld-linux.so.2 No symbol table info available. #1 0x015ef40e in __GI___poll (fds=0x8280400, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:87 resultvar = <optimized out> oldtype = -516 result = <optimized out> #2 0x0173e34b in g_poll () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #3 0x0172f896 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #4 0x0172fc2a in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #5 0x002c4ada in QEventDispatcherGlib::processEvents (this=0x827f8d0, flags=...) at kernel/qeventdispatcher_glib.cpp:422 d = 0x8280f18 canWait = true savedFlags = {i = 0} result = <optimized out> #6 0x002951dd in QEventLoop::processEvents (this=0xb6aff2b0, flags=...) at kernel/qeventloop.cpp:149 d = 0x8282540 #7 0x00295421 in QEventLoop::exec (this=0xb6aff2b0, flags=...) at kernel/qeventloop.cpp:201 d = 0x8282540 app = 0xb6aff27c #8 0x0019890b in QThread::exec (this=0xb6bd6448) at thread/qthread.cpp:498 d = 0xb6bdfe78 locker = {val = 3065904840} eventLoop = {<QObject> = {_vptr.QObject = 0x3cd448, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x358580 "QObject", data = 0x358620, extradata = 0x3c83a0}}, d_ptr = {d = 0x8282540}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x3610e0 "Qt", data = 0x3649a0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x3c8390, stringdata = 0x36a8c0 "QEventLoop", data = 0x36a8e0, extradata = 0x0}}} returnCode = <optimized out> #9 0x00275e2d in QInotifyFileSystemWatcherEngine::run (this=0xb6bd6448) at io/qfilesystemwatcher_inotify.cpp:248 sn = {<QObject> = {_vptr.QObject = 0x3cd568, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x358580 "QObject", data = 0x358620, extradata = 0x3c83a0}}, d_ptr = {d = 0x8282340}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x3610e0 "Qt", data = 0x3649a0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x3c8390, stringdata = 0x36bac0 "QSocketNotifier", data = 0x36bb00, extradata = 0x0}}, sockfd = 13, sntype = QSocketNotifier::Read, snenabled = true} #10 0x0019b7b3 in QThreadPrivate::start (arg=0xb6bd6448) at thread/qthread_unix.cpp:331 __clframe = {__cancel_routine = 0x19a660 <QThreadPrivate::finish(void*)>, __cancel_arg = 0xb6bd6448, __do_it = 1, __cancel_type = <optimized out>} thr = 0xb6bd6448 data = 0xb6bdffb0 #11 0x016aed31 in start_thread (arg=0xb6affb70) at pthread_create.c:304 __res = <optimized out> pd = 0xb6affb70 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {23855092, 0, 4001536, -1229982648, 923798494, -1121138511}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = <optimized out> robust = <optimized out> pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #12 0x015fe0ce in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 No locals. Backtrace stopped: Not enough registers or memory available to unwind further Thread 2 (Thread 0xb74bab70 (LWP 13092)): #0 0x001110c2 in ?? () from /lib/ld-linux.so.2 No symbol table info available. #1 0x015ef40e in __GI___poll (fds=0x8357638, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:87 resultvar = <optimized out> oldtype = -516 result = <optimized out> #2 0x0173e34b in g_poll () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #3 0x0172f896 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #4 0x0172fc2a in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #5 0x002c4ada in QEventDispatcherGlib::processEvents (this=0x8357570, flags=...) at kernel/qeventdispatcher_glib.cpp:422 d = 0x835d378 canWait = true savedFlags = {i = 0} result = <optimized out> #6 0x002951dd in QEventLoop::processEvents (this=0xb74ba2b0, flags=...) at kernel/qeventloop.cpp:149 d = 0x8359970 #7 0x00295421 in QEventLoop::exec (this=0xb74ba2b0, flags=...) at kernel/qeventloop.cpp:201 d = 0x8359970 app = 0xb74ba27c #8 0x0019890b in QThread::exec (this=0x8355958) at thread/qthread.cpp:498 d = 0x8355978 locker = {val = 137714120} eventLoop = {<QObject> = {_vptr.QObject = 0x3cd448, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x358580 "QObject", data = 0x358620, extradata = 0x3c83a0}}, d_ptr = {d = 0x8359970}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x3610e0 "Qt", data = 0x3649a0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x3c8390, stringdata = 0x36a8c0 "QEventLoop", data = 0x36a8e0, extradata = 0x0}}} returnCode = <optimized out> #9 0x00275e2d in QInotifyFileSystemWatcherEngine::run (this=0x8355958) at io/qfilesystemwatcher_inotify.cpp:248 sn = {<QObject> = {_vptr.QObject = 0x3cd568, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x358580 "QObject", data = 0x358620, extradata = 0x3c83a0}}, d_ptr = {d = 0x835da80}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x3610e0 "Qt", data = 0x3649a0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x3c8390, stringdata = 0x36bac0 "QSocketNotifier", data = 0x36bb00, extradata = 0x0}}, sockfd = 11, sntype = QSocketNotifier::Read, snenabled = true} #10 0x0019b7b3 in QThreadPrivate::start (arg=0x8355958) at thread/qthread_unix.cpp:331 __clframe = {__cancel_routine = 0x19a660 <QThreadPrivate::finish(void*)>, __cancel_arg = 0x8355958, __do_it = 1, __cancel_type = <optimized out>} thr = 0x8355958 data = 0x8354f58 #11 0x016aed31 in start_thread (arg=0xb74bab70) at pthread_create.c:304 __res = <optimized out> pd = 0xb74bab70 now = <optimized out> unwind_buf = {cancel_jmp_buf = {{jmp_buf = {23855092, 0, 4001536, -1219779512, -5239843, -1121138511}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}} not_first_call = <optimized out> robust = <optimized out> pagesize_m1 = <optimized out> sp = <optimized out> freesize = <optimized out> __PRETTY_FUNCTION__ = "start_thread" #12 0x015fe0ce in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130 No locals. Backtrace stopped: Not enough registers or memory available to unwind further Thread 1 (Thread 0xb7fc6710 (LWP 13089)): #0 0x0160bef7 in pthread_mutex_lock (mutex=0x80c9024) at forward.c:182 No locals. #1 0x0172f0c3 in g_main_context_dispatch () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #2 0x0172f990 in ?? () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #3 0x0172fc2a in g_main_context_iteration () from /lib/i386-linux-gnu/libglib-2.0.so.0 No symbol table info available. #4 0x002c4ada in QEventDispatcherGlib::processEvents (this=0x80c0478, flags=...) at kernel/qeventdispatcher_glib.cpp:422 d = 0x80c7088 canWait = true savedFlags = {i = 0} result = <optimized out> #5 0x005e0e7a in QGuiEventDispatcherGlib::processEvents (this=0x80c0478, flags=...) at kernel/qguieventdispatcher_glib.cpp:204 d = 0x80c7088 saved_flags = {i = 0} returnValue = false #6 0x002951dd in QEventLoop::processEvents (this=0xbffff464, flags=...) at kernel/qeventloop.cpp:149 d = 0x8e9a388 #7 0x00295421 in QEventLoop::exec (this=0xbffff464, flags=...) at kernel/qeventloop.cpp:201 d = 0x8e9a388 app = 0xbffff41c #8 0x0029a19d in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1064 threadData = 0x80c1128 eventLoop = {<QObject> = {_vptr.QObject = 0x3cd448, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x358580 "QObject", data = 0x358620, extradata = 0x3c83a0}}, d_ptr = {d = 0x8e9a388}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x3610e0 "Qt", data = 0x3649a0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x3c8390, stringdata = 0x36a8c0 "QEventLoop", data = 0x36a8e0, extradata = 0x0}}} returnCode = <optimized out> #9 0x00526924 in QApplication::exec () at kernel/qapplication.cpp:3760 No locals. #10 0x0805a061 in main (argc=134912960, argv=0x80a9bc0) at /home/dennis/marble/src-git/src/qtmain.cpp:256 graphicsString = {static null = {<No data fields>}, static shared_null = {ref = {_q_value = 1}, alloc = 0, size = 0, data = 0x80a9bd2, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 54}, alloc = 0, size = 0, data = 0x3cff9e, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0x80c2b30, static codecForCStrings = 0x0} app = {<QCoreApplication> = {<QObject> = {_vptr.QObject = 0xe71528, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x358580 "QObject", data = 0x358620, extradata = 0x3c83a0}}, d_ptr = {d = 0x80c6e80}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x3610e0 "Qt", data = 0x3649a0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x3c8390, stringdata = 0x36a960 "QCoreApplication", data = 0x36aa00, extradata = 0x0}}, static self = 0x0}, static staticMetaObject = {d = {superdata = 0x3cd4e0, stringdata = 0xc4d040 "QApplication", data = 0xc4d280, extradata = 0x0}}} marbleDataPath = {static null = {<No data fields>}, static shared_null = {ref = {_q_value = 1}, alloc = 0, size = 0, data = 0x80a9bd2, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 54}, alloc = 0, size = 0, data = 0x3cff9e, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0x80a9bc0, static codecForCStrings = 0x0} mapThemeId = {static null = {<No data fields>}, static shared_null = {ref = {_q_value = 1}, alloc = 0, size = 0, data = 0x80a9bd2, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 54}, alloc = 0, size = 0, data = 0x3cff9e, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0x80a9bc0, static codecForCStrings = 0x0} cmdLineSettings = {{d = 0x80a9be0, e = 0x80a9be0}} window = 0x811f828 args = {<QList<QString>> = {{p = {static shared_null = {ref = {_q_value = 1}, alloc = 0, begin = 0, end = 0, sharable = 1, array = {0x0}}, d = 0x8163c38}, d = 0x8163c38}}, <No data fields>} graphicsSettings = <optimized out> lang = {static null = {<No data fields>}, static shared_null = {ref = {_q_value = 1}, alloc = 0, size = 0, data = 0x80a9bd2, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 54}, alloc = 0, size = 0, data = 0x3cff9e, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0x812ac38, static codecForCStrings = 0x0} translator = {<QObject> = {_vptr.QObject = 0x3cd628, static staticMetaObject = {d = {superdata = 0x0, stringdata = 0x358580 "QObject", data = 0x358620, extradata = 0x3c83a0}}, d_ptr = {d = 0x812f210}, static staticQtMetaObject = {d = {superdata = 0x0, stringdata = 0x3610e0 "Qt", data = 0x3649a0, extradata = 0x0}}}, static staticMetaObject = {d = {superdata = 0x3c8390, stringdata = 0x36bd40 "QTranslator", data = 0x36bd60, extradata = 0x0}}} dataPathIndex = <optimized out> distanceString = {static null = {<No data fields>}, static shared_null = {ref = {_q_value = 1}, alloc = 0, size = 0, data = 0x80a9bd2, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 54}, alloc = 0, size = 0, data = 0x3cff9e, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0x80a9bc0, static codecForCStrings = 0x0} profiles = {i = 0} coordinatesString = {static null = {<No data fields>}, static shared_null = {ref = {_q_value = 1}, alloc = 0, size = 0, data = 0x80a9bd2, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 54}, alloc = 0, size = 0, data = 0x3cff9e, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0x80a9bc0, static codecForCStrings = 0x0} measurement = <optimized out> Git commit db8123f7d90f143703c85e61db153286b751e11b by Dennis Nienhüser. Committed on 19/01/2012 at 23:47. Pushed by nienhueser into branch 'KDE/4.8'. Work around a bug in Qt 4.7 that leads to segfaults at startup. See bug report and comments in the code for details. Thanks to Bernhard for helping to track this down :) M +16 -0 src/lib/MarbleModel.cpp http://commits.kde.org/marble/db8123f7d90f143703c85e61db153286b751e11b Git commit b0f00d00d86f9e9bf0468eefcc098f8a3cb9b269 by Dennis Nienhüser. Committed on 19/01/2012 at 23:47. Pushed by nienhueser into branch 'master'. Work around a bug in Qt 4.7 that leads to segfaults at startup. See bug report and comments in the code for details. Thanks to Bernhard for helping to track this down :) (cherry picked from commit db8123f7d90f143703c85e61db153286b751e11b) M +16 -0 src/lib/MarbleModel.cpp http://commits.kde.org/marble/b0f00d00d86f9e9bf0468eefcc098f8a3cb9b269 Git commit 5194639c63837f5b404c31f1c24e0417c46685fe by Bernhard Beschow. Committed on 20/01/2012 at 16:43. Pushed by beschow into branch 'master'. mention the Qt bug in the workaround for bug 288612 (cherry picked from commit 743899e82d1708b76f8e9d88ecabdd5c2c22fb22) M +7 -7 src/lib/MarbleModel.cpp http://commits.kde.org/marble/5194639c63837f5b404c31f1c24e0417c46685fe Git commit fd719f720a3fa7a0c599d0b6f06259e2ddca19b9 by Dennis Nienhüser, on behalf of Bernhard Beschow. Committed on 16/01/2012 at 20:01. Pushed by nienhueser into branch 'Touch/1.3'. instantiate event loops in runner plugins rather than in RunnerTask and instantiate runners in background threads Instantiating the event loops in the runner plugins rather than in RunnerTask resolves weired usage of QEventLoop: The synchronous runners were finished before QEventLoop::exec() was called. Somehow the finished signal of the runners still managed to quit the loop, such that exec() wouldn't block. Until Qt 4.8 we might just have been lucky... Instantiating runners in the background thread avoids thread affinity issues wrt. to QEventLoop. In particular, QEventLoop instances would block a background thread forever because calling quit() or exit() wouldn't cause exec() to return. FIXED-IN: 1.3.0 REVIEW: 103711 M +9 -22 src/lib/MarbleRunnerManager.cpp M +57 -44 src/lib/RunnerTask.cpp M +33 -16 src/lib/RunnerTask.h M +7 -0 src/plugins/runner/hostip/HostipRunner.cpp M +14 -0 src/plugins/runner/nominatim/OsmNominatimRunner.cpp M +7 -0 src/plugins/runner/openrouteservice/OpenRouteServiceRunner.cpp M +8 -0 src/plugins/runner/yours/YoursRunner.cpp http://commits.kde.org/marble/fd719f720a3fa7a0c599d0b6f06259e2ddca19b9 |