Hello,
Here is some old patches I did for KDE 3.5 you may also be interested
in applying to Trinity, as they fix some annoying issues with
knetworkmanager.
The first patch fixes a memory leak in dbus-1-qt3, which cause
knetworkmanager to leak about 4 megs/hour. Basically, the function
QDBusConnection::sendWithReply() encapsulates the reply with
QDBusMessage::fromDBusMessage(), the problem is
dbus_connection_send_with_reply_and_block() already dbus_message_ref()
the message, and QDBusMessage::fromDBusMessage() do it again. So, when
the QDBusMessage object is later destroyed, dbus_message_unref() is
called but the refcount is still at 1... so the message never get
free'd. I tried removing the _ref() from
QDBusMessage::fromDBusMessage(), but then knetworkmanager crashes, so
I guess some messages are actually copied using this function
somewhere else in the code. Simply using _unref() on the reply in
QDBusConnection::sendWithReply() before returning looks like the most
pragmatic solution.
--- qdbusconnection.cpp 2008-06-06 02:35:56.000000000 +0800
+++ qdbusconnection.cpp.new 2011-10-30 21:45:06.300981252 +0800
@@ -285,7 +285,12 @@
dbus_message_unref(msg);
- return QDBusMessage::fromDBusMessage(reply);
+ QDBusMessage mess = QDBusMessage::fromDBusMessage(reply);
+
+ /* XXX fromDbusMessage do a ref(), avoid leaking */
+ dbus_message_unref(reply);
+
+ return mess;
}
void QDBusConnection::flush() const
I have another patch to remove the very annoying lag when typing a WPA
passphrase in the "Add connection" wizard. The code is very bad, it
computes the hash of the passphrase every time the user inputs a
character, so typing is slow and laggy even on my i7 CPU. Here is a
fix to only compute the hash when the QLineEdit lose focus.
patch -l -p0
knetworkmanager-connection_setting_wireless_security_widget.h <<'EOF'
143c143
< void slotPSKChanged(const QString&);
---
void slotPSKChanged();
EOF
patch -l -p0
knetworkmanager-connection_setting_wireless_security_widget.cpp <<'EOF'
435c435
< connect(txtPSK, SIGNAL(textChanged(const QString&)), this,
SLOT(slotPSKChanged(const QString&)));
---
connect(txtPSK, SIGNAL(lostFocus()), this,
SLOT(slotPSKChanged()));
439c439
< WirelessSecurityWPAPSKImpl::slotPSKChanged(const QString& psk)
---
WirelessSecurityWPAPSKImpl::slotPSKChanged()
441d440
<
443a443
QString psk = txtPSK->text();
EOF
(sorry for the format, I didn't have the source tree at hand so copied
the last patch from my slackbuild)
Regards,
R.
Hello,
I adapted your patches to TDE 3.5.13, they are attached.
Alas, it seems that the dbus part (fix memory leak), when applied, makes
knetworkmanager crash immediatly. at startup (on Fedora).
So I only applied the knetworkmanager part (fix wpa), it does not crash,
but I did not test it (I do not use wifi).
Thanks
Francois Andriot