From 29acb7fcf8993d96d7c776d6e60dbb7464d8ebad Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Mon, 4 Oct 2021 15:12:33 +0330 Subject: [PATCH] LibCore: Add a Socket::set_idle() API that turns the notifiers on/off When a socket's user doesn't need it to be active, but wants to keep it open, the socket's notifiers should not be enabled to avoid hogging the CPU with effectively useless notifications. This API can be used to disable said notifiers until the user needs the notifications. --- Userland/Libraries/LibCore/Socket.cpp | 8 ++++++++ Userland/Libraries/LibCore/Socket.h | 1 + 2 files changed, 9 insertions(+) diff --git a/Userland/Libraries/LibCore/Socket.cpp b/Userland/Libraries/LibCore/Socket.cpp index b21c487041..6d263de7ee 100644 --- a/Userland/Libraries/LibCore/Socket.cpp +++ b/Userland/Libraries/LibCore/Socket.cpp @@ -218,6 +218,14 @@ bool Socket::close() return IODevice::close(); } +void Socket::set_idle(bool idle) +{ + if (m_read_notifier) + m_read_notifier->set_enabled(!idle); + if (m_notifier) + m_notifier->set_enabled(!idle); +} + void Socket::ensure_read_notifier() { VERIFY(m_connected); diff --git a/Userland/Libraries/LibCore/Socket.h b/Userland/Libraries/LibCore/Socket.h index 3ccbae20e2..85c1c442db 100644 --- a/Userland/Libraries/LibCore/Socket.h +++ b/Userland/Libraries/LibCore/Socket.h @@ -43,6 +43,7 @@ public: int destination_port() const { return m_destination_port; } virtual bool close() override; + virtual void set_idle(bool); Function on_connected; Function on_error;