gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r9440 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r9440 - gnunet/src/util
Date: Mon, 9 Nov 2009 15:49:03 -0700

Author: durner
Date: 2009-11-09 15:49:03 -0700 (Mon, 09 Nov 2009)
New Revision: 9440

Modified:
   gnunet/src/util/network.c
Log:
[W32] don't busy wait if there are no sockets to wait on, activate error check 
from other platforms

Modified: gnunet/src/util/network.c
===================================================================
--- gnunet/src/util/network.c   2009-11-09 22:40:03 UTC (rev 9439)
+++ gnunet/src/util/network.c   2009-11-09 22:49:03 UTC (rev 9440)
@@ -802,21 +802,44 @@
                               const struct GNUNET_TIME_Relative timeout)
 {
   int nfds;
+#ifdef MINGW
+  int handles;
+#endif
   nfds = 0;
+#ifdef MINGW
+  handles = 0;
+#endif
   if (NULL != rfds)
-    nfds = rfds->nsds;
+    {
+      nfds = rfds->nsds;
+#ifdef MINGW
+      handles = GNUNET_CONTAINER_slist_count (rfds->handles);
+#endif
+    }
   if (NULL != wfds)
-    nfds = GNUNET_MAX (nfds, wfds->nsds);
+    {
+      nfds = GNUNET_MAX (nfds, wfds->nsds);
+#ifdef MINGW
+      handles += GNUNET_CONTAINER_slist_count (wfds->handles);
+#endif
+    }
   if (NULL != efds)
-    nfds = GNUNET_MAX (nfds, efds->nsds);
+    {
+      nfds = GNUNET_MAX (nfds, efds->nsds);
+#ifdef MINGW
+      handles += GNUNET_CONTAINER_slist_count (efds->handles);
+#endif
+    }
 
-#ifndef MINGW
   struct timeval tv;
   tv.tv_sec = timeout.value / GNUNET_TIME_UNIT_SECONDS.value;
   tv.tv_usec =
     1000 * (timeout.value - (tv.tv_sec * GNUNET_TIME_UNIT_SECONDS.value));
-  if ((nfds == 0) && (timeout.value == GNUNET_TIME_UNIT_FOREVER_REL.value))
-
+  if ((nfds == 0) && (timeout.value == GNUNET_TIME_UNIT_FOREVER_REL.value)
+#ifdef MINGW
+      && handles == 0
+#endif
+    )
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                   _
@@ -824,6 +847,7 @@
                   "select");
       GNUNET_break (0);
     }
+#ifndef MINGW
   return select (nfds + 1,
                  (rfds != NULL) ? &rfds->sds : NULL,
                  (wfds != NULL) ? &wfds->sds : NULL,
@@ -858,17 +882,14 @@
     }
   if (rfds)
     sock_read = rfds->sds;
-
   else
     FD_ZERO (&sock_read);
   if (wfds)
     sock_write = wfds->sds;
-
   else
     FD_ZERO (&sock_write);
   if (efds)
     sock_except = efds->sds;
-
   else
     FD_ZERO (&sock_except);
 
@@ -1020,7 +1041,9 @@
                 }
             }
         }
-    select_loop_end:;
+    select_loop_end:
+      if (retcode == 0 && nfds == 0)
+        Sleep(GNUNET_MIN(100, limit - GetTickCount()));
     }
   while (retcode == 0 && (ms_total == INFINITE || GetTickCount () < limit));
   if (retcode != -1)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]