LibCore+LibTLS: Don't keep a "ready to write" notifier on all Sockets

The "ready to write" notifier we set up in generic socket connection is
really only meant to detect a successful connection. Once we have a TCP
connection, for example, it will fire on every event loop iteration.

This was causing IRC Client to max out the CPU by getting this no-op
notifier callback over and over.

Since this was only used by TLSv12, I changed that code to create its
own notifier instead. It might be possible to improve TLS performance
by only processing writes when actually needed, but I didn't look very
closely at that for this patch. :^)
This commit is contained in:
Andreas Kling 2020-05-18 20:16:52 +02:00
parent 9eaf22090f
commit 4b202a3c79
Notes: sideshowbarker 2024-07-19 06:29:10 +09:00
5 changed files with 27 additions and 20 deletions

View file

@ -127,11 +127,13 @@ bool Socket::common_connect(const struct sockaddr* addr, socklen_t addrlen)
if (!m_connected) {
m_connected = true;
ensure_read_notifier();
if (m_notifier) {
m_notifier->remove_from_parent();
m_notifier = nullptr;
}
if (on_connected)
on_connected();
}
if (on_ready_to_write)
on_ready_to_write();
};
int rc = ::connect(fd(), addr, addrlen);
if (rc < 0) {