[Spice-devel] [PATCH vdagent v3 8/8] udscs: remove client support for select()
Jakub Janků
janku.jakub.jj at gmail.com
Tue Oct 10 21:21:53 UTC 2017
Drop functions:
- udscs_client_fill_fds()
- udscs_client_handle_fds()
These became obsolete with GMainLoop integration.
Move required code to udscs_server_fill_fds()
and udscs_server_handle_fds(), respectively.
---
src/udscs.c | 48 ++++++++++++++----------------------------------
src/udscs.h | 16 ----------------
2 files changed, 14 insertions(+), 50 deletions(-)
diff --git a/src/udscs.c b/src/udscs.c
index 3a1ea44..64f0307 100644
--- a/src/udscs.c
+++ b/src/udscs.c
@@ -276,7 +276,6 @@ static void udscs_read_complete(struct udscs_connection **connp)
conn->header_read = 0;
}
-/* A helper for udscs_client_handle_fds() */
static void udscs_do_read(struct udscs_connection **connp)
{
ssize_t n;
@@ -327,7 +326,6 @@ static void udscs_do_read(struct udscs_connection **connp)
}
}
-/* A helper for udscs_client_handle_fds() */
static void udscs_do_write(struct udscs_connection **connp)
{
ssize_t n;
@@ -361,32 +359,6 @@ static void udscs_do_write(struct udscs_connection **connp)
}
}
-void udscs_client_handle_fds(struct udscs_connection **connp, fd_set *readfds,
- fd_set *writefds)
-{
- if (!*connp)
- return;
-
- if (FD_ISSET((*connp)->fd, readfds))
- udscs_do_read(connp);
-
- if (*connp && FD_ISSET((*connp)->fd, writefds))
- udscs_do_write(connp);
-}
-
-int udscs_client_fill_fds(struct udscs_connection *conn, fd_set *readfds,
- fd_set *writefds)
-{
- if (!conn)
- return -1;
-
- FD_SET(conn->fd, readfds);
- if (conn->write_buf)
- FD_SET(conn->fd, writefds);
-
- return conn->fd + 1;
-}
-
static gboolean udscs_io_channel_cb(GIOChannel *source,
GIOCondition condition,
gpointer data)
@@ -580,9 +552,12 @@ int udscs_server_fill_fds(struct udscs_server *server, fd_set *readfds,
conn = server->connections_head.next;
while (conn) {
- int conn_nfds = udscs_client_fill_fds(conn, readfds, writefds);
- if (conn_nfds > nfds)
- nfds = conn_nfds;
+ FD_SET(conn->fd, readfds);
+ if (conn->write_buf)
+ FD_SET(conn->fd, writefds);
+
+ if (conn->fd >= nfds)
+ nfds = conn->fd + 1;
conn = conn->next;
}
@@ -603,10 +578,15 @@ void udscs_server_handle_fds(struct udscs_server *server, fd_set *readfds,
conn = server->connections_head.next;
while (conn) {
- /* conn maybe destroyed by udscs_client_handle_fds (when disconnected),
- so get the next connection first. */
+ /* conn may be destroyed by udscs_do_read() or udscs_do_write()
+ * (when disconnected), so get the next connection first. */
next_conn = conn->next;
- udscs_client_handle_fds(&conn, readfds, writefds);
+
+ if (FD_ISSET(conn->fd, readfds))
+ udscs_do_read(&conn);
+ if (conn && FD_ISSET(conn->fd, writefds))
+ udscs_do_write(&conn);
+
conn = next_conn;
}
}
diff --git a/src/udscs.h b/src/udscs.h
index 30a96db..48ecf90 100644
--- a/src/udscs.h
+++ b/src/udscs.h
@@ -78,22 +78,6 @@ struct udscs_connection *udscs_connect(const char *socketname,
*/
void udscs_destroy_connection(struct udscs_connection **connp);
-/* Given a udscs client, fill the fd_sets pointed to by readfds and
- * writefds for select() usage.
- * Return value: value of the highest fd + 1 or -1 if conn is NULL
- */
-int udscs_client_fill_fds(struct udscs_connection *conn, fd_set *readfds,
- fd_set *writefds);
-
-/* Handle any events flagged by select for the given udscs client.
- * Note that upon disconnection this will call the disconnect callback
- * and then destroy the connection which will set *connp to NULL.
- *
- * Does nothing if *connp is NULL.
- */
-void udscs_client_handle_fds(struct udscs_connection **connp, fd_set *readfds,
- fd_set *writefds);
-
/* Queue a message for delivery to the client connected through conn.
* Return value: 0 on success -1 on error (only happens when malloc fails).
*/
--
2.13.6
More information about the Spice-devel
mailing list