Summary: | Ctrl+Tab konqueror crash (KTabWidget::qt_metacall, KonqFrameTabs::qt_metacall) | ||
---|---|---|---|
Product: | [Applications] konqueror | Reporter: | H L Prasad <hlprasu> |
Component: | general | Assignee: | Konqueror Developers <konq-bugs> |
Status: | RESOLVED FIXED | ||
Severity: | crash | CC: | andresbajotierra, big-nikita, faure, fduppa, finex, hllacey, jo.spam, lastpixl+kde, laviddichterman, maksim, martin.nad89, pavkamlc, pourtouteslesclasses, redhawks01, unnikrishnan.anil |
Priority: | NOR | ||
Version: | unspecified | ||
Target Milestone: | --- | ||
Platform: | Unlisted Binaries | ||
OS: | Linux | ||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: |
Description
H L Prasad
2009-08-14 11:32:33 UTC
Confirmed in current trunk too. @FiNeX: can you provide a better backtrace? Thanks Application: Konqueror (kdeinit4), signal: Segmentation fault [Current thread is 0 (LWP 9778)] Thread 2 (Thread 0x7f06502e6910 (LWP 9783)): #0 0x00007f066996405d in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/libpthread.so.0 #1 0x00007f0669bd32b2 in QWaitCondition::wait () from /usr/lib/libQtCore.so.4 #2 0x00007f0669bc9412 in ?? () from /usr/lib/libQtCore.so.4 #3 0x00007f0669bd2285 in ?? () from /usr/lib/libQtCore.so.4 #4 0x00007f066995f57a in start_thread () from /lib/libpthread.so.0 #5 0x00007f066646316d in clone () from /lib/libc.so.6 #6 0x0000000000000000 in ?? () Thread 1 (Thread 0x7f066a18e760 (LWP 9778)): [KCrash Handler] #5 0x00007f066744d311 in QTabWidget::qt_metacall () from /usr/lib/libQtGui.so.4 #6 0x00007f06682275d5 in KTabWidget::qt_metacall (this=0x21d2870, _c=QMetaObject::InvokeMetaMethod, _id=-2223672, _a=0x7fff59fd4fc0) at /home/test/KDE4/src/build/kdelibs/kdeui/ktabwidget.moc:124 #7 0x00007f065d0511a5 in KonqFrameTabs::qt_metacall (this=0x21d2870, _c=QMetaObject::InvokeMetaMethod, _id=-2223672, _a=0x7fff59fd4fc0) at /home/test/KDE4/src/build/kdebase/apps/konqueror/src/konqtabs.moc:94 #8 0x00007f0669cccdec in QMetaObject::activate () from /usr/lib/libQtCore.so.4 #9 0x00007f065d0460ca in KonqFrame::eventFilter (this=0x21cf230, ev=<value optimized out>) at /home/test/KDE4/src/kdebase/apps/konqueror/src/konqframe.cpp:175 #10 0x00007f0669cb7007 in QCoreApplicationPrivate::sendThroughObjectEventFilters () from /usr/lib/libQtCore.so.4 #11 0x00007f066703166c in QApplicationPrivate::notify_helper () from /usr/lib/libQtGui.so.4 #12 0x00007f0667039483 in QApplication::notify () from /usr/lib/libQtGui.so.4 #13 0x00007f0668137f36 in KApplication::notify (this=0x7fff59fd7730, receiver=0x220e760, event=0x7fff59fd5460) at /home/test/KDE4/src/kdelibs/kdeui/kernel/kapplication.cpp:302 #14 0x00007f0669cb7cec in QCoreApplication::notifyInternal () from /usr/lib/libQtCore.so.4 #15 0x00007f06670c0fca in ?? () from /usr/lib/libQtGui.so.4 #16 0x00007f06670c3511 in ?? () from /usr/lib/libQtGui.so.4 #17 0x00007f066709ca44 in QApplication::x11ProcessEvent () from /usr/lib/libQtGui.so.4 #18 0x00007f06670c4e6c in ?? () from /usr/lib/libQtGui.so.4 #19 0x00007f0665aeddbe in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0 #20 0x00007f0665af1568 in g_main_context_iterate () from /usr/lib/libglib-2.0.so.0 #21 0x00007f0665af1690 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0 #22 0x00007f0669ce01b6 in QEventDispatcherGlib::processEvents () from /usr/lib/libQtCore.so.4 #23 0x00007f06670c464e in ?? () from /usr/lib/libQtGui.so.4 #24 0x00007f0669cb65f2 in QEventLoop::processEvents () from /usr/lib/libQtCore.so.4 #25 0x00007f0669cb69c4 in QEventLoop::exec () from /usr/lib/libQtCore.so.4 #26 0x00007f0669cb8b79 in QCoreApplication::exec () from /usr/lib/libQtCore.so.4 #27 0x00007f065d0b5653 in kdemain (argc=<value optimized out>, argv=<value optimized out>) at /home/test/KDE4/src/kdebase/apps/konqueror/src/konqmain.cpp:257 #28 0x00000000004070be in launch (argc=4, _name=<value optimized out>, args=<value optimized out>, cwd=<value optimized out>, envc=32, envs=<value optimized out>, reset_env=true, tty=0x0, avoid_loops=false, startup_id_str=0x1919790 "blackhole;1250449488;49583;4479_TIME41236125") at /home/test/KDE4/src/kdelibs/kinit/kinit.cpp:705 #29 0x0000000000407ccd in handle_launcher_request (sock=19, who=<value optimized out>) at /home/test/KDE4/src/kdelibs/kinit/kinit.cpp:1197 #30 0x000000000040816b in handle_requests (waitForPid=0) at /home/test/KDE4/src/kdelibs/kinit/kinit.cpp:1381 #31 0x0000000000408962 in main (argc=1, argv=<value optimized out>, envp=<value optimized out>) at /home/test/KDE4/src/kdelibs/kinit/kinit.cpp:1825 Weird.. you don't have the KConfig calls.. *** Bug 205287 has been marked as a duplicate of this bug. *** *** Bug 205969 has been marked as a duplicate of this bug. *** *** Bug 207753 has been marked as a duplicate of this bug. *** *** Bug 210182 has been marked as a duplicate of this bug. *** *** Bug 213795 has been marked as a duplicate of this bug. *** *** Bug 214360 has been marked as a duplicate of this bug. *** *** Bug 217568 has been marked as a duplicate of this bug. *** *** Bug 222053 has been marked as a duplicate of this bug. *** ==17290== Invalid read of size 4 ==17290== at 0x5C2FB12: QTabWidget::qt_metacall(QMetaObject::Call, int, void**) (moc_qtabwidget.cpp:143) ==17290== by 0x4B36AE9: KTabWidget::qt_metacall(QMetaObject::Call, int, void**) (ktabwidget.moc:128) ==17290== by 0x40D3F89: KonqFrameTabs::qt_metacall(QMetaObject::Call, int, void**) (konqtabs.moc:100) ==17290== by 0x52257B5: QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) (qmetaobject.cpp:237) ==17290== by 0x5237979: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) (qobject.cpp:3291) ==17290== by 0x40D0236: KonqFrameContainer::ctrlTabPressed() (konqframecontainer.moc:88) ==17290== by 0x40CD0CC: KonqFrame::eventFilter(QObject*, QEvent*) (konqframe.cpp:180) ==17290== by 0x521EBC4: QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) (qcoreapplication.cpp:819) ==17290== by 0x571EE41: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:4238) ==17290== by 0x571CDD7: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3720) ==17290== by 0x4A1E472: KApplication::notify(QObject*, QEvent*) (kapplication.cpp:302) ==17290== by 0x521E91B: QCoreApplication::notifyInternal(QObject*, QEvent*) (qcoreapplication.cpp:704) ==17290== Address 0x1c is not stack'd, malloc'd or (recently) free'd That konqframe.cpp:180 cast looks really ugly... Yep, and it's the problem... That bit of code is from 2001, and is ultra-brittle, so no wonder it broke. My naive attempt at fixing this is this: --- src/konqframe.cpp (revision 1066847) +++ src/konqframe.cpp (working copy) @@ -177,7 +177,17 @@ QKeyEvent * keyEv = static_cast<QKeyEvent*>(ev); if ((keyEv->key()==Qt::Key_Tab) && (keyEv->modifiers()==Qt::ControlModifier)) { - emit ((KonqFrameContainer*)parent())->ctrlTabPressed(); + // Find the container frame.. + KonqFrameContainerBase* cont; + for (cont = parentContainer(); cont; cont = cont->parentContainer()) { + + kDebug() << cont << frameTypeToString(cont->frameType()); + if (cont->frameType() == KonqFrameBase::Container) + break; + } + + if (cont) + emit static_cast<KonqFrameContainer*>(cont)->ctrlTabPressed(); return true; } } which sort of works --- it switches between views within a single tab; but I think I better consult dfaure for his opinion, since I don't know the class hierarchy well here at all. SVN commit 1076829 by dfaure: Rewrite the Ctrl+Tab handling with a single event filter; no more signals and unchecked casts (crash!). BUG: 203809 Fixed for: 4.4 M +2 -16 konqframe.cpp M +0 -6 konqframe.h M +0 -2 konqframecontainer.h M +6 -1 konqmainwindow.cpp M +0 -2 konqtabs.h M +0 -4 konqviewmanager.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=1076829 SVN commit 1078192 by dfaure: Backport 1076829: Fix crash on Ctrl+Tab. Fixed for: 4.3.5 CCBUG: 203809 M +2 -16 konqframe.cpp M +0 -6 konqframe.h M +0 -2 konqframecontainer.h M +6 -1 konqmainwindow.cpp M +0 -2 konqtabs.h M +0 -4 konqviewmanager.cpp WebSVN link: http://websvn.kde.org/?view=rev&revision=1078192 *** Bug 222299 has been marked as a duplicate of this bug. *** For the record, I just fixed Ctrl+Tab handling so that it behaves as expected (even with splitted views and tabs) for KDE-4.5. SVN commit 1110338 by dfaure: Fix Ctrl+Tab handling, especially for the interesting case of splitted views in tabs: * Rewrite chooseNextView to be deterministic rather than rely on a map sorted on pointer addresses * Remove the fix for bug 67956 from KonqViewManager::doSetActivePart and fix that bug again at the right level: by removing the setActivePart from KonqView::changePart, which I added in 2000 with the comment "just in case". Heh. * Fix another setActivePart in KonqMainWindow::slotPartChanged which also would trigger bug 67956. * Fix the Ctrl+Tab event filter so that it doesn't let it propagate to QTabWidget (which also handles that shortcut) * Add unittests for 67956 (with and without the option "tabs in front"); add unittests for Ctrl+Tab. *** Bug 233140 has been marked as a duplicate of this bug. *** *** Bug 234429 has been marked as a duplicate of this bug. *** |