You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ag...@apache.org on 2021/04/13 07:36:13 UTC

[incubator-nuttx-apps] branch master updated: netutils/rpmsg: Prepare poll fds only when error with EINTR

This is an automated email from the ASF dual-hosted git repository.

aguettouche pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git


The following commit(s) were added to refs/heads/master by this push:
     new 0ee6f0e  netutils/rpmsg: Prepare poll fds only when error with EINTR
0ee6f0e is described below

commit 0ee6f0e5e05326d107304498a112a8005014249a
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Mon Feb 1 18:31:07 2021 +0800

    netutils/rpmsg: Prepare poll fds only when error with EINTR
    
    to improve the performance
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
    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 ceb33f3..2efb837 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,