From 7101e8cd8fa6ea74059ae4fd83c6201f5161404d Mon Sep 17 00:00:00 2001 From: Kai Krakow Date: Wed, 3 Oct 2018 04:16:30 +0200 Subject: [PATCH] gamemode: Optimize detection of dupe registers GameMode can do a pretty expensive lookup function now for the exe. Let's spare some CPU cycles by detecting a duplicate PID early. Nothing makes use of the exe path at this stage. Signed-off-by: Kai Krakow --- daemon/gamemode.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/daemon/gamemode.c b/daemon/gamemode.c index 961d187..4f53b64 100644 --- a/daemon/gamemode.c +++ b/daemon/gamemode.c @@ -454,15 +454,18 @@ bool game_mode_context_register(GameModeContext *self, pid_t client) fputs("OOM\n", stderr); return false; } - cl->executable = game_mode_context_find_exe(client); - if (!cl->executable) - goto error_cleanup; + /* Check the PID first to spare a potentially expensive lookup for the exe */ if (game_mode_context_has_client(self, client)) { LOG_ERROR("Addition requested for already known process [%d]\n", client); goto error_cleanup; } + /* Lookup the executable */ + cl->executable = game_mode_context_find_exe(client); + if (!cl->executable) + goto error_cleanup; + /* Check our blacklist and whitelist */ if (!config_get_client_whitelisted(self->config, cl->executable)) { LOG_MSG("Client [%s] was rejected (not in whitelist)\n", cl->executable);