The bitmask from select is only valid if it returned a positive value,
so record it for use by CheckWriteSocket and CheckReadSocket

Signed-off-by: Keith Packard <[email protected]>
---
 os/WaitFor.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/os/WaitFor.c b/os/WaitFor.c
index bf03273..8f6f6eb 100644
--- a/os/WaitFor.c
+++ b/os/WaitFor.c
@@ -126,6 +126,7 @@ static OsTimerPtr timers = NULL;
 static fd_set WriteSelectMask;
 static Bool AnyWriteSelectMask;
 static fd_set LastSelectWriteMask;
+static int LastSelectReturn;
 
 /*****************
  * AddWriteSocket:
@@ -163,7 +164,7 @@ RemoveWriteSocket(int fd)
 Bool
 CheckWriteSocket(int fd)
 {
-    return AnyWriteSelectMask && FD_ISSET(fd, &LastSelectWriteMask);
+    return LastSelectReturn > 0 && AnyWriteSelectMask && FD_ISSET(fd, 
&LastSelectWriteMask);
 }
 
 /*****************
@@ -176,7 +177,7 @@ CheckWriteSocket(int fd)
 Bool
 CheckReadSocket(int fd)
 {
-    return FD_ISSET(fd, &LastSelectMask);
+    return LastSelectReturn > 0 && FD_ISSET(fd, &LastSelectMask);
 }
 
 
@@ -279,6 +280,7 @@ WaitForSomething(int *pClientsReady)
             i = Select(MaxClients, &LastSelectMask, NULL, NULL, wt);
         }
         selecterr = GetErrno();
+       LastSelectReturn = i;
         WakeupHandler(i, (pointer) &LastSelectMask);
         if (i <= 0) {           /* An error or timeout occurred */
             if (dispatchException)
-- 
1.7.10

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to