daemon: add game_mode_context_lookup_client method

Like game_mode_context_has_client, but will add a reference to
the client, if a match was found.
This commit is contained in:
Christian Kellner 2019-07-02 17:29:50 +02:00
parent 208f37b7d1
commit 5949a988ea
2 changed files with 31 additions and 0 deletions

View File

@ -358,6 +358,29 @@ pid_t *game_mode_context_list_clients(GameModeContext *self, unsigned int *count
return res;
}
GameModeClient *game_mode_context_lookup_client(GameModeContext *self, pid_t client)
{
GameModeClient *found = NULL;
pthread_rwlock_rdlock(&self->rwlock);
/* Walk all clients and find a matching pid */
for (GameModeClient *cl = self->client; cl; cl = cl->next) {
if (cl->pid == client) {
found = cl;
break;
}
}
if (found) {
game_mode_client_ref(found);
}
pthread_rwlock_unlock(&self->rwlock);
return found;
}
static int game_mode_apply_client_optimisations(GameModeContext *self, pid_t client)
{
/* Store current renice and apply */

View File

@ -103,6 +103,14 @@ int game_mode_context_num_clients(GameModeContext *self);
*/
pid_t *game_mode_context_list_clients(GameModeContext *self, unsigned int *count);
/**
* Lookup up information about a client via the pid;
*
* @returns A pointer to a GameModeClient struct or NULL in case no client
* with the corresponding id could be found. Adds a reference to
* GameModeClient that needs to be released.
*/
GameModeClient *game_mode_context_lookup_client(GameModeContext *self, pid_t client);
/**
* Register a new game client with the context
*