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!)
This commit is contained in:
Andreas Kling 2021-10-23 23:06:15 +02:00
commit 3bed7d5a5e
Notes: sideshowbarker 2024-07-18 03:20:18 +09:00
2 changed files with 4 additions and 3 deletions

View file

@ -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;
}