diff mbox

[for-1.5,2/2] main-loop: partial revert of 5e3bc73

Message ID 1368718561-7816-3-git-send-email-stefanha@redhat.com
State New
Headers show

Commit Message

Stefan Hajnoczi May 16, 2013, 3:36 p.m. UTC
This patch reverts part of 5e3bc735d93dd23f074b5116fd11e1ad8cd4962f.

Paolo Bonzini wrote this patch and commented:

"WSAEventSelect is edge-triggered and the event will not be signaled if
the socket handler does not consume all the data in the socket buffer."

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 main-loop.c | 32 ++++++++++++++------------------
 1 file changed, 14 insertions(+), 18 deletions(-)

Comments

Paolo Bonzini May 16, 2013, 4:54 p.m. UTC | #1
Il 16/05/2013 17:36, Stefan Hajnoczi ha scritto:
> This patch reverts part of 5e3bc735d93dd23f074b5116fd11e1ad8cd4962f.
> 
> Paolo Bonzini wrote this patch and commented:
> 
> "WSAEventSelect is edge-triggered and the event will not be signaled if
> the socket handler does not consume all the data in the socket buffer."
> 
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>


> ---
>  main-loop.c | 32 ++++++++++++++------------------
>  1 file changed, 14 insertions(+), 18 deletions(-)
> 
> diff --git a/main-loop.c b/main-loop.c
> index 2b8eed7..cf36645 100644
> --- a/main-loop.c
> +++ b/main-loop.c
> @@ -394,6 +394,20 @@ static int os_host_main_loop_wait(uint32_t timeout)
>          return ret;
>      }
>  
> +    FD_ZERO(&rfds);
> +    FD_ZERO(&wfds);
> +    FD_ZERO(&xfds);
> +    nfds = pollfds_fill(gpollfds, &rfds, &wfds, &xfds);
> +    if (nfds >= 0) {
> +        select_ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv0);
> +        if (select_ret != 0) {
> +            timeout = 0;
> +        }
> +        if (select_ret > 0) {
> +            pollfds_poll(gpollfds, nfds, &rfds, &wfds, &xfds);
> +        }
> +    }
> +
>      g_main_context_prepare(context, &max_priority);
>      n_poll_fds = g_main_context_query(context, max_priority, &poll_timeout,
>                                        poll_fds, ARRAY_SIZE(poll_fds));
> @@ -426,24 +440,6 @@ static int os_host_main_loop_wait(uint32_t timeout)
>          g_main_context_dispatch(context);
>      }
>  
> -    /* Call select after g_poll to avoid a useless iteration and therefore
> -     * improve socket latency.
> -     */
> -
> -    FD_ZERO(&rfds);
> -    FD_ZERO(&wfds);
> -    FD_ZERO(&xfds);
> -    nfds = pollfds_fill(gpollfds, &rfds, &wfds, &xfds);
> -    if (nfds >= 0) {
> -        select_ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv0);
> -        if (select_ret != 0) {
> -            timeout = 0;
> -        }
> -        if (select_ret > 0) {
> -            pollfds_poll(gpollfds, nfds, &rfds, &wfds, &xfds);
> -        }
> -    }
> -
>      return select_ret || g_poll_ret;
>  }
>  #endif
>
diff mbox

Patch

diff --git a/main-loop.c b/main-loop.c
index 2b8eed7..cf36645 100644
--- a/main-loop.c
+++ b/main-loop.c
@@ -394,6 +394,20 @@  static int os_host_main_loop_wait(uint32_t timeout)
         return ret;
     }
 
+    FD_ZERO(&rfds);
+    FD_ZERO(&wfds);
+    FD_ZERO(&xfds);
+    nfds = pollfds_fill(gpollfds, &rfds, &wfds, &xfds);
+    if (nfds >= 0) {
+        select_ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv0);
+        if (select_ret != 0) {
+            timeout = 0;
+        }
+        if (select_ret > 0) {
+            pollfds_poll(gpollfds, nfds, &rfds, &wfds, &xfds);
+        }
+    }
+
     g_main_context_prepare(context, &max_priority);
     n_poll_fds = g_main_context_query(context, max_priority, &poll_timeout,
                                       poll_fds, ARRAY_SIZE(poll_fds));
@@ -426,24 +440,6 @@  static int os_host_main_loop_wait(uint32_t timeout)
         g_main_context_dispatch(context);
     }
 
-    /* Call select after g_poll to avoid a useless iteration and therefore
-     * improve socket latency.
-     */
-
-    FD_ZERO(&rfds);
-    FD_ZERO(&wfds);
-    FD_ZERO(&xfds);
-    nfds = pollfds_fill(gpollfds, &rfds, &wfds, &xfds);
-    if (nfds >= 0) {
-        select_ret = select(nfds + 1, &rfds, &wfds, &xfds, &tv0);
-        if (select_ret != 0) {
-            timeout = 0;
-        }
-        if (select_ret > 0) {
-            pollfds_poll(gpollfds, nfds, &rfds, &wfds, &xfds);
-        }
-    }
-
     return select_ret || g_poll_ret;
 }
 #endif