client: run client_manager_expire() in an idle event
With the GLib main loop, the client manager can install its own event in case a client is expired. No need for main.c to call client_manager_expire() manually.
This commit is contained in:
parent
a12b57e1e9
commit
3cd0b90ff6
23
src/client.c
23
src/client.c
@ -110,6 +110,7 @@ struct client {
|
||||
|
||||
static LIST_HEAD(clients);
|
||||
static unsigned num_clients;
|
||||
static guint expire_source_id;
|
||||
|
||||
static void client_write_deferred(struct client *client);
|
||||
|
||||
@ -135,8 +136,27 @@ void client_set_permission(struct client *client, unsigned permission)
|
||||
client->permission = permission;
|
||||
}
|
||||
|
||||
static void
|
||||
client_manager_expire(void);
|
||||
|
||||
/**
|
||||
* An idle event which calls client_manager_expire().
|
||||
*/
|
||||
static gboolean
|
||||
client_manager_expire_event(G_GNUC_UNUSED gpointer data)
|
||||
{
|
||||
expire_source_id = 0;
|
||||
client_manager_expire();
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void client_set_expired(struct client *client)
|
||||
{
|
||||
if (expire_source_id == 0 && client->fd >= 0)
|
||||
/* delayed deletion */
|
||||
expire_source_id = g_idle_add(client_manager_expire_event,
|
||||
NULL);
|
||||
|
||||
if (client->source_id != 0) {
|
||||
g_source_remove(client->source_id);
|
||||
client->source_id = 0;
|
||||
@ -601,7 +621,8 @@ void client_manager_deinit(void)
|
||||
client_max_connections = 0;
|
||||
}
|
||||
|
||||
void client_manager_expire(void)
|
||||
static void
|
||||
client_manager_expire(void)
|
||||
{
|
||||
struct client *client, *n;
|
||||
|
||||
|
@ -29,7 +29,6 @@ struct sockaddr;
|
||||
|
||||
void client_manager_init(void);
|
||||
void client_manager_deinit(void);
|
||||
void client_manager_expire(void);
|
||||
|
||||
void client_new(int fd, const struct sockaddr *addr, int uid);
|
||||
|
||||
|
@ -196,7 +196,6 @@ main_notify_triggered(void)
|
||||
unsigned flags;
|
||||
|
||||
syncPlayerAndPlaylist();
|
||||
client_manager_expire();
|
||||
reap_update_task();
|
||||
|
||||
/* send "idle" notificaions to all subscribed
|
||||
|
Loading…
Reference in New Issue
Block a user