mirror of
https://github.com/FeralInteractive/gamemode.git
synced 2025-06-06 23:57:22 +02:00
daemon: method to list all registered clients
Return an array of pid_t elements containing the process ids of all registered clients. Memory ownership is transferred to the client and must be freed.
This commit is contained in:
parent
455ea0c72e
commit
208f37b7d1
@ -45,6 +45,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <stdatomic.h>
|
#include <stdatomic.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <systemd/sd-daemon.h> /* TODO: Move usage to gamemode-dbus.c */
|
#include <systemd/sd-daemon.h> /* TODO: Move usage to gamemode-dbus.c */
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
@ -332,6 +333,31 @@ int game_mode_context_num_clients(GameModeContext *self)
|
|||||||
return atomic_load(&self->refcount);
|
return atomic_load(&self->refcount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pid_t *game_mode_context_list_clients(GameModeContext *self, unsigned int *count)
|
||||||
|
{
|
||||||
|
pid_t *res = NULL;
|
||||||
|
unsigned int i = 0;
|
||||||
|
unsigned int n;
|
||||||
|
|
||||||
|
pthread_rwlock_rdlock(&self->rwlock);
|
||||||
|
n = (unsigned int)atomic_load(&self->refcount);
|
||||||
|
|
||||||
|
if (n > 0)
|
||||||
|
res = (pid_t *)malloc(n * sizeof(pid_t));
|
||||||
|
|
||||||
|
for (GameModeClient *cl = self->client; cl; cl = cl->next) {
|
||||||
|
assert(n > i);
|
||||||
|
|
||||||
|
res[i] = cl->pid;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
*count = i;
|
||||||
|
|
||||||
|
pthread_rwlock_unlock(&self->rwlock);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
static int game_mode_apply_client_optimisations(GameModeContext *self, pid_t client)
|
static int game_mode_apply_client_optimisations(GameModeContext *self, pid_t client)
|
||||||
{
|
{
|
||||||
/* Store current renice and apply */
|
/* Store current renice and apply */
|
||||||
|
@ -95,6 +95,14 @@ void game_mode_context_destroy(GameModeContext *self);
|
|||||||
*/
|
*/
|
||||||
int game_mode_context_num_clients(GameModeContext *self);
|
int game_mode_context_num_clients(GameModeContext *self);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List the currently active clients.
|
||||||
|
* @param out holds the number of active clients.
|
||||||
|
*
|
||||||
|
* @returns A array of pid_t or NULL if there are no active clients.
|
||||||
|
*/
|
||||||
|
pid_t *game_mode_context_list_clients(GameModeContext *self, unsigned int *count);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a new game client with the context
|
* Register a new game client with the context
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user