jsonrpc: simplify by removing use of poll()
Change-Id: Ib756212d227fb71b9ef3d486223740e4cb152815 Signed-off-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-on: https://review.gerrithub.io/370200 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
1be7a80c2d
commit
1153b8c5c4
@ -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;
|
||||
};
|
||||
|
||||
|
@ -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,62 +349,30 @@ 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;
|
||||
}
|
||||
|
||||
for (i = 0; i < server->num_conns; i++) {
|
||||
pfd = &server->pollfds[i + 1];
|
||||
conn = &server->conns[i];
|
||||
|
||||
if (pfd->revents & POLLOUT) {
|
||||
if (conn->closed) {
|
||||
continue;
|
||||
}
|
||||
|
||||
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 (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);
|
||||
spdk_jsonrpc_server_conn_close(conn);
|
||||
continue;
|
||||
}
|
||||
|
||||
pfd->revents = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user