From 0ee6f0e5e05326d107304498a112a8005014249a Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Mon, 1 Feb 2021 18:31:07 +0800 Subject: [PATCH] netutils/rpmsg: Prepare poll fds only when error with EINTR to improve the performance Signed-off-by: Xiang Xiao Change-Id: Id88df8618473b56236821b9e0f6399dfef2c958d --- netutils/usrsock_rpmsg/usrsock_rpmsg_server.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/netutils/usrsock_rpmsg/usrsock_rpmsg_server.c b/netutils/usrsock_rpmsg/usrsock_rpmsg_server.c index ceb33f3d1..2efb83789 100644 --- a/netutils/usrsock_rpmsg/usrsock_rpmsg_server.c +++ b/netutils/usrsock_rpmsg/usrsock_rpmsg_server.c @@ -786,6 +786,7 @@ static void usrsock_rpmsg_process_poll(struct usrsock_rpmsg_s *priv, /* Stop poll in until recv get called */ + pfds[i].events &= ~POLLIN; priv->pfds[j].events &= ~POLLIN; } @@ -795,6 +796,7 @@ static void usrsock_rpmsg_process_poll(struct usrsock_rpmsg_s *priv, /* Stop poll out until send get called */ + pfds[i].events &= ~POLLOUT; priv->pfds[j].events &= ~POLLOUT; } @@ -804,6 +806,7 @@ static void usrsock_rpmsg_process_poll(struct usrsock_rpmsg_s *priv, /* Stop poll at all */ + pfds[i].ptr = NULL; priv->pfds[j].ptr = NULL; } @@ -856,18 +859,20 @@ int main(int argc, char *argv[]) while (1) { - /* Collect all socks which need monitor */ - - ret = usrsock_rpmsg_prepare_poll(priv, pfds); - /* Monitor the state change from them */ - if (ppoll(pfds, ret, NULL, &sigmask) > 0) + if (ppoll(pfds, ret, NULL, &sigmask) >= 0) { /* Process all changed socks */ usrsock_rpmsg_process_poll(priv, pfds, ret); } + else if (errno == EINTR) + { + /* Collect all socks which need monitor */ + + ret = usrsock_rpmsg_prepare_poll(priv, pfds); + } } rpmsg_unregister_callback(priv,