[Top][All Lists]
[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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r9440 - gnunet/src/util,
gnunet <=