Browse Source

SystemServer: Handle missing service executable gracefully

I use the `configure-components` functionality locally during
development. There are a few services (SpiceAgent) which aren't marked
as required components, and hence aren't built in all configurations,
but we still try to launch them in all configurations.

Instead of letting the forked SystemServer process crash, lets
gracefully handle the situation of a missing binary and provide a
message to the user.
Brian Gianforcaro 3 years ago
parent
commit
b5b67a1747
1 changed files with 5 additions and 0 deletions
  1. 5 0
      Userland/Services/SystemServer/Service.cpp

+ 5 - 0
Userland/Services/SystemServer/Service.cpp

@@ -131,6 +131,11 @@ void Service::activate()
 
 void Service::spawn(int socket_fd)
 {
+    if (!Core::File::exists(m_executable_path)) {
+        dbgln("{}: binary \"{}\" does not exist, skipping service.", name(), m_executable_path);
+        return;
+    }
+
     dbgln_if(SERVICE_DEBUG, "Spawning {}", name());
 
     m_run_timer.start();