gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r9503 - gnunet/src/util
Date: Fri, 13 Nov 2009 14:49:46 -0700

Author: durner
Date: 2009-11-13 14:49:46 -0700 (Fri, 13 Nov 2009)
New Revision: 9503

Modified:
   gnunet/src/util/network.c
   gnunet/src/util/scheduler.c
   gnunet/src/util/test_scheduler.c
Log:
various fixes

Modified: gnunet/src/util/network.c
===================================================================
--- gnunet/src/util/network.c   2009-11-13 21:44:58 UTC (rev 9502)
+++ gnunet/src/util/network.c   2009-11-13 21:49:46 UTC (rev 9503)
@@ -636,6 +636,9 @@
         if (nfds + 1 > dst->nsds)
           dst->nsds = nfds + 1;
       }
+#ifdef MINGW
+  GNUNET_CONTAINER_slist_append (dst->handles, src->handles);
+#endif
 }
 
 
@@ -652,21 +655,8 @@
   to->nsds = from->nsds;
 
 #ifdef MINGW
-  struct GNUNET_CONTAINER_SList_Iterator *iter;
   GNUNET_CONTAINER_slist_clear (to->handles);
-  for (iter = GNUNET_CONTAINER_slist_begin (from->handles);
-       GNUNET_CONTAINER_slist_end (iter) != GNUNET_YES;
-       GNUNET_CONTAINER_slist_next (iter))
-
-    {
-      void *handle;
-      size_t len;
-      handle = GNUNET_CONTAINER_slist_get (iter, &len);
-      GNUNET_CONTAINER_slist_add (to->handles,
-                                  GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
-                                  handle, len);
-    }
-  GNUNET_CONTAINER_slist_iter_destroy (iter);
+  GNUNET_CONTAINER_slist_append (to->handles, from->handles);
 #endif /*  */
 }
 
@@ -697,7 +687,7 @@
 #ifdef MINGW
   HANDLE hw;
   GNUNET_DISK_internal_file_handle_ (h, &hw, sizeof (HANDLE));
-  GNUNET_CONTAINER_slist_add (fds->handles, GNUNET_NO, &hw, sizeof (HANDLE));
+  GNUNET_CONTAINER_slist_add (fds->handles, 
GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, &hw, sizeof (HANDLE));
 
 #else /*  */
   int fd;
@@ -722,7 +712,7 @@
 {
 
 #ifdef MINGW
-  return GNUNET_CONTAINER_slist_contains (fds->handles, h->h,
+  return GNUNET_CONTAINER_slist_contains (fds->handles, &h->h,
                                           sizeof (HANDLE));
 
 #else /*  */
@@ -749,6 +739,24 @@
   for (; nfds >= 0; nfds--)
     if (FD_ISSET (nfds, &fds1->sds) && FD_ISSET (nfds, &fds2->sds))
       return GNUNET_YES;
+#ifdef MINGW
+  {
+      struct GNUNET_CONTAINER_SList_Iterator *it;
+
+      for(it = GNUNET_CONTAINER_slist_begin (fds1->handles); 
GNUNET_CONTAINER_slist_end (it) != GNUNET_YES; GNUNET_CONTAINER_slist_next (it))
+        {
+          HANDLE *h;
+
+          h = GNUNET_CONTAINER_slist_get (it, NULL);
+          if (GNUNET_CONTAINER_slist_contains (fds2->handles, h, sizeof 
(HANDLE)))
+            {
+              GNUNET_CONTAINER_slist_iter_destroy (it);
+              return GNUNET_YES;
+            }
+        }
+      GNUNET_CONTAINER_slist_iter_destroy (it);
+  }
+#endif
   return GNUNET_NO;
 }
 
@@ -859,6 +867,8 @@
   DWORD limit;
   fd_set sock_read, sock_write, sock_except;
   fd_set aread, awrite, aexcept;
+  struct GNUNET_CONTAINER_SList *handles_read, *handles_write, *handles_except;
+
   int i;
   struct timeval tvslice;
   int retcode;
@@ -880,6 +890,11 @@
       Sleep (ms_total);
       return 0;
     }
+
+  handles_read = GNUNET_CONTAINER_slist_create ();
+  handles_write = GNUNET_CONTAINER_slist_create ();
+  handles_except = GNUNET_CONTAINER_slist_create ();
+
   if (rfds)
     sock_read = rfds->sds;
   else
@@ -936,22 +951,16 @@
 
         {
           struct GNUNET_CONTAINER_SList_Iterator *i;
-          int on_next;
-          on_next = GNUNET_NO;
           for (i = GNUNET_CONTAINER_slist_begin (rfds->handles);
                GNUNET_CONTAINER_slist_end (i) != GNUNET_YES;
-               on_next || GNUNET_CONTAINER_slist_next (i))
+               GNUNET_CONTAINER_slist_next (i))
 
             {
               HANDLE h;
               DWORD dwBytes;
               h = *(HANDLE *) GNUNET_CONTAINER_slist_get (i, NULL);
-              on_next = GNUNET_NO;
               if (!PeekNamedPipe (h, NULL, 0, NULL, &dwBytes, NULL))
-
                 {
-                  GNUNET_CONTAINER_slist_erase (i);
-                  on_next = GNUNET_YES;
                   retcode = -1;
                   SetErrnoFromWinError (GetLastError ());
 
@@ -962,19 +971,14 @@
 #endif /*  */
                   goto select_loop_end;
                 }
-
               else if (dwBytes)
 
                 {
+                  GNUNET_CONTAINER_slist_add (handles_read,
+                      GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, &h,
+                      sizeof (HANDLE));
                   retcode++;
                 }
-
-              else
-
-                {
-                  GNUNET_CONTAINER_slist_erase (i);
-                  on_next = GNUNET_YES;
-                }
             }
           GNUNET_CONTAINER_slist_iter_destroy (i);
         }
@@ -984,33 +988,31 @@
 
         {
           struct GNUNET_CONTAINER_SList_Iterator *i;
-          int on_next;
-          on_next = GNUNET_NO;
           for (i = GNUNET_CONTAINER_slist_begin (efds->handles);
                GNUNET_CONTAINER_slist_end (i) != GNUNET_YES;
-               on_next || GNUNET_CONTAINER_slist_next (i))
+               GNUNET_CONTAINER_slist_next (i))
 
             {
               HANDLE h;
               DWORD dwBytes;
               h = *(HANDLE *) GNUNET_CONTAINER_slist_get (i, NULL);
-              if (PeekNamedPipe (h, NULL, 0, NULL, &dwBytes, NULL))
+              if (!PeekNamedPipe (h, NULL, 0, NULL, &dwBytes, NULL))
 
                 {
-                  GNUNET_CONTAINER_slist_erase (i);
-                  on_next = GNUNET_YES;
+                  GNUNET_CONTAINER_slist_add (handles_except,
+                      GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, &h,
+                      sizeof (HANDLE));
                   retcode++;
                 }
-
-              else
-                on_next = GNUNET_NO;
             }
           GNUNET_CONTAINER_slist_iter_destroy (i);
         }
 
-      /* FIXME */
       if (wfds)
-        GNUNET_assert (GNUNET_CONTAINER_slist_count (wfds->handles) == 0);
+        {
+          GNUNET_CONTAINER_slist_append (handles_write, wfds->handles);
+          retcode += GNUNET_CONTAINER_slist_count (wfds->handles);
+        }
 
       /* Check for closed sockets */
       for (i = 0; i < nfds; i++)
@@ -1046,6 +1048,7 @@
         Sleep (GNUNET_MIN (100, limit - GetTickCount ()));
     }
   while (retcode == 0 && (ms_total == INFINITE || GetTickCount () < limit));
+
   if (retcode != -1)
 
     {
@@ -1054,20 +1057,32 @@
         {
           GNUNET_NETWORK_fdset_zero (rfds);
           GNUNET_NETWORK_fdset_copy_native (rfds, &aread, retcode);
+          GNUNET_CONTAINER_slist_clear (rfds->handles);
+          GNUNET_CONTAINER_slist_append (rfds->handles, handles_read);
+
         }
       if (wfds)
 
         {
           GNUNET_NETWORK_fdset_zero (wfds);
           GNUNET_NETWORK_fdset_copy_native (wfds, &awrite, retcode);
+          GNUNET_CONTAINER_slist_clear (wfds->handles);
+          GNUNET_CONTAINER_slist_append (wfds->handles, handles_write);
         }
       if (efds)
 
         {
           GNUNET_NETWORK_fdset_zero (efds);
           GNUNET_NETWORK_fdset_copy_native (efds, &aexcept, retcode);
+          GNUNET_CONTAINER_slist_clear (efds->handles);
+          GNUNET_CONTAINER_slist_append (efds->handles, handles_except);
         }
     }
+
+  GNUNET_CONTAINER_slist_destroy (handles_read);
+  GNUNET_CONTAINER_slist_destroy (handles_write);
+  GNUNET_CONTAINER_slist_destroy (handles_except);
+
   return retcode;
 
 #endif /*  */

Modified: gnunet/src/util/scheduler.c
===================================================================
--- gnunet/src/util/scheduler.c 2009-11-13 21:44:58 UTC (rev 9502)
+++ gnunet/src/util/scheduler.c 2009-11-13 21:49:46 UTC (rev 9503)
@@ -608,14 +608,14 @@
       check_ready (&sched, rs, ws);
       run_ready (&sched);
     }
-#ifndef MINGW
   GNUNET_SIGNAL_handler_uninstall (shc_int);
   GNUNET_SIGNAL_handler_uninstall (shc_term);
+#ifndef MINGW
   GNUNET_SIGNAL_handler_uninstall (shc_quit);
   GNUNET_SIGNAL_handler_uninstall (shc_hup);
+#endif
   GNUNET_DISK_pipe_close (sigpipe);
   sigpipe = NULL;
-#endif
   GNUNET_NETWORK_fdset_destroy (rs);
   GNUNET_NETWORK_fdset_destroy (ws);
 }

Modified: gnunet/src/util/test_scheduler.c
===================================================================
--- gnunet/src/util/test_scheduler.c    2009-11-13 21:44:58 UTC (rev 9502)
+++ gnunet/src/util/test_scheduler.c    2009-11-13 21:49:46 UTC (rev 9503)
@@ -197,11 +197,7 @@
   *ok = 8;
   GNUNET_SCHEDULER_add_delayed (tc->sched,
                                 GNUNET_TIME_UNIT_FOREVER_REL, &taskLast, cls);
-#ifndef MINGW
   GNUNET_break (0 == PLIBC_KILL (getpid (), SIGTERM));
-#else
-  GNUNET_SCHEDULER_shutdown (tc->sched);
-#endif
 }
 
 
@@ -257,7 +253,9 @@
 
   GNUNET_log_setup ("test_scheduler", "WARNING", NULL);
   ret += check ();
+#ifndef MINGW
   ret += checkSignal ();
+#endif
   ret += checkShutdown ();
   ret += checkCancel ();
   GNUNET_DISK_pipe_close (p);





reply via email to

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