On the crash with the sidebar's "Hide config button" entry...

Maks Orlovich mo002j at mail.rochester.edu
Thu Feb 27 03:36:17 GMT 2003


Hi..

Currently, Konqueror crashes if you click on the Wrench icon in the sidebar, 
and uncheck the  "Show Configuration Button" entry. This occurs because a 
deleteLater request to remove the button gets handled in the inner event loop 
for the popup menu, deleting the button that initiated the .exec() on the 
menu while its member function is still executing (See the valgrind output 
below for more details). It's possible to workaround this (attached); but the 
patch is extraordinarily ugly and hacky, and I don't see a better way. 
I think the better option would be to just kill this menu entry, at least when 
invoked from the wrench button. If this is agreed to, I'll make a patch to do 
this. This arguably one piece of configurability that we don't need.

At any rate, IMHO, crashing on invocation of a menu entry, no matter how 
obscure, during regular use, is unacceptible and hence I'd suggest that this 
bug is a showstopper for 3.1.1

---------------------

==8567==
==8567== Invalid read of size 4
==8567==    at 0x40D7C6CF: QPushButton::popupPressed() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40F5615B: QPushButton::qt_invoke(int, QUObject*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x491214E0: KMultiTabBarButton::qt_invoke(int, QUObject*) (in 
/code/opt/kde3/lib/libkmultitabbar.so.0.0.0)
==8567==    by 0x40C88608: QObject::activate_signal(QConnectionList*, 
QUObject*) (in /usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C884AC: QObject::activate_signal(int) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40F472CA: QButton::pressed() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40D0A9B7: QButton::mousePressEvent(QMouseEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40CBC6EA: QWidget::event(QEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C28C73: QApplication::internalNotify(QObject*, QEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C284A2: QApplication::notify(QObject*, QEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x408BE54D: KApplication::notify(QObject*, QEvent*) (in 
/code/opt/kde3/lib/libkdecore.so.4.2.0)
==8567==    by 0x40BCEB67: QETWidget::translateMouseEvent(_XEvent const*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40BCC6AE: QApplication::x11ProcessEvent(_XEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40BE1769: QEventLoop::processEvents(unsigned) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C3E595: QEventLoop::enterLoop() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C3E437: QEventLoop::exec() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C28EA0: QApplication::exec() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x4023E664: main (in /code/opt/kde3/lib/konqueror.so)
==8567==    by 0x412AF796: __libc_start_main (in /lib/i686/libc-2.3.1.so)
==8567==    by 0x8048510: (within /code/opt/kde3/bin/konqueror)
==8567==    Address 0x43DCB64C is 0 bytes inside a block of size 152 free'd
==8567==    at 0x4015D8C8: __builtin_delete (vg_clientfuncs.c:196)
==8567==    by 0x4015D8E8: operator delete(void*) (vg_clientfuncs.c:205)
==8567==    by 0x49124638: KMultiTabBarButton::~KMultiTabBarButton() (in 
/code/opt/kde3/lib/libkmultitabbar.so.0.0.0)
==8567==    by 0x40C86242: QObject::event(QEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40CBC67B: QWidget::event(QEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C28C73: QApplication::internalNotify(QObject*, QEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C28868: QApplication::notify(QObject*, QEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x408BE54D: KApplication::notify(QObject*, QEvent*) (in 
/code/opt/kde3/lib/libkdecore.so.4.2.0)
==8567==    by 0x40C29A09: QApplication::sendPostedEvents(QObject*, int) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C29887: QApplication::sendPostedEvents() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40BE110D: QEventLoop::processEvents(unsigned) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C3E595: QEventLoop::enterLoop() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C28F00: QApplication::enter_loop() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40D78C25: QPopupMenu::exec(QPoint const&, int) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40D7C6CB: QPushButton::popupPressed() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40F5615B: QPushButton::qt_invoke(int, QUObject*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x491214E0: KMultiTabBarButton::qt_invoke(int, QUObject*) (in 
/code/opt/kde3/lib/libkmultitabbar.so.0.0.0)
==8567==    by 0x40C88608: QObject::activate_signal(QConnectionList*, 
QUObject*) (in /usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C884AC: QObject::activate_signal(int) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40F472CA: QButton::pressed() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40D0A9B7: QButton::mousePressEvent(QMouseEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40CBC6EA: QWidget::event(QEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C28C73: QApplication::internalNotify(QObject*, QEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C284A2: QApplication::notify(QObject*, QEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x408BE54D: KApplication::notify(QObject*, QEvent*) (in 
/code/opt/kde3/lib/libkdecore.so.4.2.0)
==8567==    by 0x40BCEB67: QETWidget::translateMouseEvent(_XEvent const*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40BCC6AE: QApplication::x11ProcessEvent(_XEvent*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40BE1769: QEventLoop::processEvents(unsigned) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C3E595: QEventLoop::enterLoop() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C3E437: QEventLoop::exec() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x40C28EA0: QApplication::exec() (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x4023E664: main (in /code/opt/kde3/lib/konqueror.so)
==8567==
==8567== Jump to the invalid address stated on the next line
==8567==    at 0x2: ???
==8567==    by 0x40F5615B: QPushButton::qt_invoke(int, QUObject*) (in 
/usr/lib/qt3/lib/libqt-mt.so.3.1.1)
==8567==    by 0x491214E0: KMultiTabBarButton::qt_invoke(int, QUObject*) (in
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dont_crash.diff
Type: text/x-diff
Size: 2304 bytes
Desc: not available
URL: <https://mail.kde.org/mailman/private/kfm-devel/attachments/20030226/a1371e75/attachment.diff>


More information about the kfm-devel mailing list