Bug 255118 - Memory leak in KLineEdit
Summary: Memory leak in KLineEdit
Status: RESOLVED FIXED
Alias: None
Product: kdelibs
Classification: Frameworks and Libraries
Component: kdeui (show other bugs)
Version: 4.5
Platform: Ubuntu Linux
: NOR normal
Target Milestone: ---
Assignee: kdelibs bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-10-24 16:31 UTC by Joris Guisson
Modified: 2010-10-26 19:59 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Joris Guisson 2010-10-24 16:31:44 UTC
Version:           4.5 (using KDE 4.5.1) 
OS:                Linux

While running ktorrent under valgrind I encountered the following leak:

==13004== 132 (32 direct, 100 indirect) bytes in 1 blocks are definitely lost in loss record 1,046 of 1,285
==13004==    at 0x402569A: operator new(unsigned int) (vg_replace_malloc.c:255)
==13004==    by 0x49ED5B5: KLineEdit::init() (klineedit.cpp:270)
==13004==    by 0x49F6196: KLineEdit::KLineEdit(QWidget*) (klineedit.cpp:238)
==13004==    by 0x42BB374: kt::HintLineEdit::HintLineEdit(QWidget*) (hintlineedit.cpp:50)
==13004==    by 0x808C39A: kt::QueueManagerWidget::QueueManagerWidget(kt::QueueManager*, QWidget*) (queuemanagerwidget.cpp:55)
==13004==    by 0x807FC9A: kt::TorrentActivity::TorrentActivity(kt::Core*, kt::GUI*, QWidget*) (torrentactivity.cpp:79)
==13004==    by 0x807C7BA: kt::GUI::GUI() (gui.cpp:96)
==13004==    by 0x807DF84: kt::App::newInstance() (app.cpp:58)
==13004==    by 0x490ACAF: KUniqueApplication::Private::_k_newInstanceNoFork() (kuniqueapplication.cpp:373)
==13004==    by 0x490AD23: KUniqueApplication::qt_metacall(QMetaObject::Call, int, void**) (kuniqueapplication.moc:72)
==13004==    by 0x51A0D49: QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) (qmetaobject.cpp:237)
==13004==    by 0x51AC225: QMetaCallEvent::placeMetaCall(QObject*) (qobject.cpp:534)
==13004==    by 0x51ADAC1: QObject::event(QEvent*) (qobject.cpp:1219)
==13004==    by 0x519AE8A: QCoreApplication::event(QEvent*) (qcoreapplication.cpp:1561)
==13004==    by 0x54A5C53: QApplication::event(QEvent*) (qapplication.cpp:2439)
==13004==    by 0x54A277B: QApplicationPrivate::notify_helper(QObject*, QEvent*) (qapplication.cpp:4396)
==13004==    by 0x54A87CD: QApplication::notify(QObject*, QEvent*) (qapplication.cpp:3798)
==13004==    by 0x807DE8F: kt::App::notify(QObject*, QEvent*) (app.cpp:97)
==13004==    by 0x519AFEA: QCoreApplication::notifyInternal(QObject*, QEvent*) (qcoreapplication.cpp:732)
==13004==    by 0x519E24A: QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) (qcoreapplication.h:215)
==13004==    by 0x519E40C: QCoreApplication::sendPostedEvents(QObject*, int) (qcoreapplication.cpp:1266)
==13004==    by 0x51C9D03: postEventSourceDispatch(_GSource*, int (*)(void*), void*) (qcoreapplication.h:220)
==13004==    by 0x69C35E4: g_main_context_dispatch (in /lib/libglib-2.0.so.0.2400.1)
==13004==    by 0x69C72D7: ??? (in /lib/libglib-2.0.so.0.2400.1)
==13004==    by 0x69C74B7: g_main_context_iteration (in /lib/libglib-2.0.so.0.2400.1)
==13004==    by 0x51C97F4: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qeventdispatcher_glib.cpp:415)
==13004==    by 0x5563DE4: QGuiEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qguieventdispatcher_glib.cpp:204)
==13004==    by 0x5199A98: QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (qeventloop.cpp:149)
==13004==    by 0x5199F19: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (qeventloop.cpp:201)
==13004==    by 0x519E4CE: QCoreApplication::exec() (qcoreapplication.cpp:1009)
==13004==    by 0x54A15A6: QApplication::exec() (qapplication.cpp:3672)
==13004==    by 0x806D08E: main (main.cpp:175)

There is no further mention in the valgrind log that the KLineEdit itself is leaked. So it would appear that there is a leak internally in KLineEdit. 

Reproducible: Always
Comment 1 Aaron J. Seigo 2010-10-26 18:53:31 UTC
SVN commit 1190023 by aseigo:

clean up the style created by the widget; the style itself doesn't set a parent widget. i believe this is due to the usual semantics of QStyle which is to be shared amongst widgets, making automatic QObject based deletion non-standard and even dangerous for QStyles. in this case, though, it does need to be deleted as there is a 1:1 relationship between the line edit and the style object. so to keep memory from leaking and to keep with the usual QStyle semantics, leave it up to KLineEdit to clean it up.

KLineEdit unit tests still pass after this commit.

thanks to Joris Guisson for the valgrinding and reporting.

BUG:255118


 M  +1 -0      klineedit.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1190023
Comment 2 Joris Guisson 2010-10-26 19:59:05 UTC
Nice, a quick fix