diff options
author | Andreas Kling <kling@serenityos.org> | 2021-10-23 23:06:15 +0200 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-10-24 01:01:01 +0200 |
commit | 3bed7d5a5ee5870de4805dd2bf47e0523e387e76 (patch) | |
tree | 061484b7d1b8effc3a081f469358c7da311b8277 | |
parent | 24642861af53f84621a3f3bba26817e4d88802b6 (diff) | |
download | serenity-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.cpp | 6 | ||||
-rw-r--r-- | Userland/Libraries/LibIPC/Connection.h | 1 |
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; |