diff --git a/lib/jsonrpc/jsonrpc_internal.h b/lib/jsonrpc/jsonrpc_internal.h index 2206c825f..5cafc3e44 100644 --- a/lib/jsonrpc/jsonrpc_internal.h +++ b/lib/jsonrpc/jsonrpc_internal.h @@ -69,14 +69,12 @@ struct spdk_jsonrpc_server_conn { uint32_t outstanding_requests; struct spdk_ring *send_queue; struct spdk_jsonrpc_request *send_request; - struct pollfd *pfd; }; struct spdk_jsonrpc_server { int sockfd; spdk_jsonrpc_handle_request_fn handle_request; struct spdk_jsonrpc_server_conn conns[SPDK_JSONRPC_MAX_CONNS]; - struct pollfd pollfds[SPDK_JSONRPC_MAX_CONNS + 1]; int num_conns; }; diff --git a/lib/jsonrpc/jsonrpc_server_tcp.c b/lib/jsonrpc/jsonrpc_server_tcp.c index ec4f9cf0d..2f504c11a 100644 --- a/lib/jsonrpc/jsonrpc_server_tcp.c +++ b/lib/jsonrpc/jsonrpc_server_tcp.c @@ -86,10 +86,6 @@ spdk_jsonrpc_server_listen(int domain, int protocol, return NULL; } - /* Put listen socket in pollfds[0] */ - server->pollfds[0].fd = server->sockfd; - server->pollfds[0].events = POLLIN; - return server; } @@ -112,9 +108,6 @@ spdk_jsonrpc_server_conn_close(struct spdk_jsonrpc_server_conn *conn) { conn->closed = true; - /* Set the pollfd fd to a negative value so it is ignored by poll() */ - conn->pfd->fd = -1; - if (conn->sockfd >= 0) { close(conn->sockfd); conn->sockfd = -1; @@ -140,7 +133,6 @@ static int spdk_jsonrpc_server_accept(struct spdk_jsonrpc_server *server) { struct spdk_jsonrpc_server_conn *conn; - struct pollfd *pfd; int rc, conn_idx, nonblock; rc = accept(server->sockfd, NULL, NULL); @@ -169,13 +161,6 @@ spdk_jsonrpc_server_accept(struct spdk_jsonrpc_server *server) return -1; } - /* Add connection to pollfds */ - pfd = &server->pollfds[conn_idx + 1]; - pfd->fd = conn->sockfd; - pfd->events = POLLIN | POLLOUT; - pfd->revents = 0; - conn->pfd = pfd; - server->num_conns++; return 0; @@ -333,7 +318,6 @@ int spdk_jsonrpc_server_poll(struct spdk_jsonrpc_server *server) { int rc, i; - struct pollfd *pfd; struct spdk_jsonrpc_server_conn *conn; for (i = 0; i < server->num_conns; i++) { @@ -365,61 +349,29 @@ spdk_jsonrpc_server_poll(struct spdk_jsonrpc_server *server) } } - rc = poll(server->pollfds, server->num_conns + 1, 0); - - if (rc < 0) { - if (errno == EINTR) { - return 0; - } - - SPDK_ERRLOG("jsonrpc poll() failed\n"); - return -1; - } - - if (rc == 0) { - /* No sockets are ready */ - return 0; - } - /* Check listen socket */ if (server->num_conns < SPDK_JSONRPC_MAX_CONNS) { - pfd = &server->pollfds[0]; - if (pfd->revents) { - spdk_jsonrpc_server_accept(server); - } - pfd->revents = 0; + spdk_jsonrpc_server_accept(server); } for (i = 0; i < server->num_conns; i++) { - pfd = &server->pollfds[i + 1]; conn = &server->conns[i]; - if (pfd->revents & POLLOUT) { - rc = spdk_jsonrpc_server_conn_send(conn); - if (rc != 0) { - SPDK_TRACELOG(SPDK_TRACE_RPC, "closing conn due to send failure\n"); - spdk_jsonrpc_server_conn_close(conn); - continue; - } + if (conn->closed) { + continue; } - if (pfd->revents & POLLIN) { - rc = spdk_jsonrpc_server_conn_recv(conn); - if (rc != 0) { - SPDK_TRACELOG(SPDK_TRACE_RPC, "closing conn due to recv failure\n"); - spdk_jsonrpc_server_conn_close(conn); - continue; - } - } - - if (pfd->revents & (POLLERR | POLLNVAL)) { - SPDK_TRACELOG(SPDK_TRACE_RPC, "closing conn due to poll() flag %d\n", - (int)pfd->revents); + rc = spdk_jsonrpc_server_conn_send(conn); + if (rc != 0) { spdk_jsonrpc_server_conn_close(conn); continue; } - pfd->revents = 0; + rc = spdk_jsonrpc_server_conn_recv(conn); + if (rc != 0) { + spdk_jsonrpc_server_conn_close(conn); + continue; + } } return 0;