1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:17:45 +00:00

LibIPC: Add Connection::send_sync_but_allow_failure()

Instead of asserting that the peer responds successfully, this API
allows for the peer to die/crash/whatever happens on the other side
while handling a synchronous request.

This will be useful when using process separation to parse untrusted
data from the web.
This commit is contained in:
Andreas Kling 2021-02-20 11:07:29 +01:00
parent 8fd86fe6c9
commit a446cea759

View file

@ -55,6 +55,7 @@ public:
{
m_responsiveness_timer = Core::Timer::create_single_shot(3000, [this] { may_have_become_unresponsive(); });
m_notifier->on_ready_to_read = [this] {
NonnullRefPtr protect = *this;
drain_messages_from_peer();
handle_messages();
};
@ -125,6 +126,13 @@ public:
return response;
}
template<typename RequestType, typename... Args>
OwnPtr<typename RequestType::ResponseType> send_sync_but_allow_failure(Args&&... args)
{
post_message(RequestType(forward<Args>(args)...));
return wait_for_specific_endpoint_message<typename RequestType::ResponseType, PeerEndpoint>();
}
virtual void may_have_become_unresponsive() { }
virtual void did_become_responsive() { }