summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-10-23 23:06:15 +0200
committerAndreas Kling <kling@serenityos.org>2021-10-24 01:01:01 +0200
commit3bed7d5a5ee5870de4805dd2bf47e0523e387e76 (patch)
tree061484b7d1b8effc3a081f469358c7da311b8277
parent24642861af53f84621a3f3bba26817e4d88802b6 (diff)
downloadserenity-3bed7d5a5ee5870de4805dd2bf47e0523e387e76.zip
LibIPC: Use a zero-delay timer for message processing
This lets us avoid using Core::deferred_invoke() which is not usable during application teardown (as there is no event loop to push the deferred invocation onto.) (Not that there is an event loop to fire the processing timer during teardown *either*, but at least we can exit gracefully with pending timers, unlike deferred invocations, which hang the process. This is an area where more improvements are definitely needed!)
-rw-r--r--Userland/Libraries/LibIPC/Connection.cpp6
-rw-r--r--Userland/Libraries/LibIPC/Connection.h1
2 files changed, 4 insertions, 3 deletions
diff --git a/Userland/Libraries/LibIPC/Connection.cpp b/Userland/Libraries/LibIPC/Connection.cpp
index 5780761d24..7aef9aeada 100644
--- a/Userland/Libraries/LibIPC/Connection.cpp
+++ b/Userland/Libraries/LibIPC/Connection.cpp
@@ -17,6 +17,7 @@ ConnectionBase::ConnectionBase(IPC::Stub& local_stub, NonnullRefPtr<Core::LocalS
, m_local_endpoint_magic(local_endpoint_magic)
{
m_responsiveness_timer = Core::Timer::create_single_shot(3000, [this] { may_have_become_unresponsive(); });
+ m_processing_timer = Core::Timer::create_single_shot(0, [this] { handle_messages(); });
}
ConnectionBase::~ConnectionBase()
@@ -175,9 +176,8 @@ bool ConnectionBase::drain_messages_from_peer()
}
if (!m_unprocessed_messages.is_empty()) {
- deferred_invoke([this] {
- handle_messages();
- });
+ if (!m_processing_timer->is_active())
+ m_processing_timer->start();
}
return true;
}
diff --git a/Userland/Libraries/LibIPC/Connection.h b/Userland/Libraries/LibIPC/Connection.h
index 446ba9e151..64b29b1569 100644
--- a/Userland/Libraries/LibIPC/Connection.h
+++ b/Userland/Libraries/LibIPC/Connection.h
@@ -60,6 +60,7 @@ protected:
NonnullRefPtr<Core::LocalSocket> m_socket;
RefPtr<Core::Timer> m_responsiveness_timer;
+ RefPtr<Core::Timer> m_processing_timer;
RefPtr<Core::Notifier> m_notifier;
NonnullOwnPtrVector<Message> m_unprocessed_messages;