diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-07 16:53:24 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-07 16:53:24 +0000 |
commit | 4f97d6740411fb53a4fb5f6e1af03e1f1b28c1ba (patch) | |
tree | 7e0e07b9d8d50fc5dd352d5b36d74fa3cb3427db /cras/src/server/cras_server.c | |
parent | 8d2c5b2edb9023b91d79709f2900ee1b643a3127 (diff) | |
parent | 8cfb92904b40ff98c82dd5309698999a28c91388 (diff) | |
download | adhd-4f97d6740411fb53a4fb5f6e1af03e1f1b28c1ba.tar.gz |
Snap for 7803083 from 8cfb92904b40ff98c82dd5309698999a28c91388 to mainline-tzdata2-release
Change-Id: Ice40f0028ec451c06ea7097e88c4152da1105d57
Diffstat (limited to 'cras/src/server/cras_server.c')
-rw-r--r-- | cras/src/server/cras_server.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/cras/src/server/cras_server.c b/cras/src/server/cras_server.c index 97c83dfd..5f2ce632 100644 --- a/cras/src/server/cras_server.c +++ b/cras/src/server/cras_server.c @@ -79,16 +79,18 @@ struct attached_client { * to watch file descriptors. The client can then read or write the fd. * Members: * fd - The file descriptor passed to select. - * callack - The funciton to call when fd is ready. + * callback - The funciton to call when fd is ready. * callback_data - Pointer passed to the callback. * pollfd - Pointer to struct pollfd for this callback. + * events - The events to poll for. */ struct client_callback { int select_fd; - void (*callback)(void *); + void (*callback)(void *data, int revents); void *callback_data; struct pollfd *pollfd; int deleted; + int events; struct client_callback *prev, *next; }; @@ -277,8 +279,8 @@ error: /* Add a file descriptor to be passed to select in the main loop. This is * registered with system state so that it is called when any client asks to * have a callback triggered based on an fd being readable. */ -static int add_select_fd(int fd, void (*cb)(void *data), void *callback_data, - void *server_data) +static int add_select_fd(int fd, void (*cb)(void *data, int events), + void *callback_data, int events, void *server_data) { struct client_callback *new_cb; struct client_callback *client_cb; @@ -301,6 +303,7 @@ static int add_select_fd(int fd, void (*cb)(void *data), void *callback_data, new_cb->callback = cb; new_cb->callback_data = callback_data; new_cb->deleted = 0; + new_cb->events = events; new_cb->pollfd = NULL; DL_APPEND(serv->client_callbacks, new_cb); @@ -474,7 +477,7 @@ int cras_server_init() * Returns 0 on success and leaves the created fd and the address information * in server_socket. * When error occurs, the created fd will be closed and the file path will be - * unlinked. + * unlinked and returns negative error code. */ static int create_and_listen_server_socket(enum CRAS_CONNECTION_TYPE conn_type, struct server_socket *server_socket) @@ -508,7 +511,7 @@ static int create_and_listen_server_socket(enum CRAS_CONNECTION_TYPE conn_type, sizeof(struct sockaddr_un)); if (rc < 0) { syslog(LOG_ERR, "Bind to server socket failed."); - rc = errno; + rc = -errno; goto error; } @@ -519,7 +522,7 @@ static int create_and_listen_server_socket(enum CRAS_CONNECTION_TYPE conn_type, if (listen(socket_fd, 5) != 0) { syslog(LOG_ERR, "Listen on server socket failed."); - rc = errno; + rc = -errno; goto error; } @@ -641,7 +644,7 @@ int cras_server_run(unsigned int profile_disable_mask) if (client_cb->deleted) continue; pollfds[num_pollfds].fd = client_cb->select_fd; - pollfds[num_pollfds].events = POLLIN; + pollfds[num_pollfds].events = client_cb->events; client_cb->pollfd = &pollfds[num_pollfds]; num_pollfds++; } @@ -687,8 +690,9 @@ int cras_server_run(unsigned int profile_disable_mask) /* Check any client-registered fd/callback pairs. */ DL_FOREACH (server_instance.client_callbacks, client_cb) if (!client_cb->deleted && client_cb->pollfd && - (client_cb->pollfd->revents & POLLIN)) - client_cb->callback(client_cb->callback_data); + (client_cb->pollfd->revents & client_cb->events)) + client_cb->callback(client_cb->callback_data, + client_cb->pollfd->revents); cleanup_select_fds(&server_instance); @@ -713,4 +717,4 @@ void cras_server_send_to_all_clients(const struct cras_client_message *msg) DL_FOREACH (server_instance.clients_head, client) cras_rclient_send_message(client->client, msg, NULL, 0); -}
\ No newline at end of file +} |