From 5905d2e9e9380f6c4d0fc370ba8271371e87e1d3 Mon Sep 17 00:00:00 2001 From: Brian Gianforcaro Date: Sun, 5 Sep 2021 10:31:39 -0700 Subject: [PATCH] RequestServer: Exit early to avoid executing protocol destructors I broke this when I made the protocol objects be wrapped by smart pointers to appease static analysis. The Protocol base class currently VERIFY's that it's never called. So to have the best of both worlds until someone actually fixes the code to do proper de-registration, just call `exit(..)` so the smart pointers never go out of scope. --- Userland/Services/RequestServer/Protocol.cpp | 1 + Userland/Services/RequestServer/main.cpp | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Userland/Services/RequestServer/Protocol.cpp b/Userland/Services/RequestServer/Protocol.cpp index 19f9fdb1f49..2db08d96859 100644 --- a/Userland/Services/RequestServer/Protocol.cpp +++ b/Userland/Services/RequestServer/Protocol.cpp @@ -31,6 +31,7 @@ Protocol::Protocol(const String& name) Protocol::~Protocol() { + // FIXME: Do proper de-registration. VERIFY_NOT_REACHED(); } diff --git a/Userland/Services/RequestServer/main.cpp b/Userland/Services/RequestServer/main.cpp index e3fea3fb0df..8b3385ea73a 100644 --- a/Userland/Services/RequestServer/main.cpp +++ b/Userland/Services/RequestServer/main.cpp @@ -46,5 +46,10 @@ int main(int, char**) auto socket = Core::LocalSocket::take_over_accepted_socket_from_system_server(); VERIFY(socket); IPC::new_client_connection(socket.release_nonnull(), 1); - return event_loop.exec(); + auto result = event_loop.exec(); + + // FIXME: We exit instead of returning, so that protocol destructors don't get called. + // The Protocol base class should probably do proper de-registration instead of + // just VERIFY_NOT_REACHED(). + exit(result); }