-fixes
authorChristian Grothoff <christian@grothoff.org>
Wed, 25 Apr 2012 15:21:53 +0000 (15:21 +0000)
committerChristian Grothoff <christian@grothoff.org>
Wed, 25 Apr 2012 15:21:53 +0000 (15:21 +0000)
src/util/server.c
src/util/service.c
src/util/test_service.c

index a730a548109f6fe8927d30df2d018948cb1a7f02..568380d5d542b9fbca1d75e1966273bc18a29029 100644 (file)
@@ -554,13 +554,14 @@ GNUNET_SERVER_create (GNUNET_CONNECTION_AccessCheck access, void *access_cls,
     while (NULL != serverAddr[i])
     {
       seen = 0;
-      for (k=0;k<i-1;k++)
-       if ( (socklen[k] == socklen[i]) &&
-            (0 == memcmp (serverAddr[k], serverAddr[i], socklen[i])) )
-       {
-         seen = 1;
-         break;
-       }
+      if (i > 0)
+       for (k=0;k<i-1;k++)
+         if ( (socklen[k] == socklen[i]) &&
+              (0 == memcmp (serverAddr[k], serverAddr[i], socklen[i])) )
+         {
+           seen = 1;
+           break;
+         }
       if (0 != seen)
       {
        /* duplicate address, skip */
index fb9830419e2f2402b9295cc66fd4351cb4a76911..ef060daaa13923eb49af023425b4d48c0fc5c892 100644 (file)
@@ -486,6 +486,11 @@ struct GNUNET_SERVICE_Context
    */
   struct GNUNET_NETWORK_Handle **lsocks;
 
+  /**
+   * Task ID of the shutdown task.
+   */
+  GNUNET_SCHEDULER_TaskIdentifier shutdown_task;
+
   /**
    * Idle timeout for server.
    */
@@ -1454,6 +1459,7 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   struct GNUNET_SERVICE_Context *service = cls;
   struct GNUNET_SERVER_Handle *server = service->server;
 
+  service->shutdown_task = GNUNET_SCHEDULER_NO_TASK;
   if (0 != (service->options & GNUNET_SERVICE_OPTION_SOFT_SHUTDOWN))
     GNUNET_SERVER_stop_listening (server);
   else
@@ -1501,8 +1507,8 @@ service_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   {
     /* install a task that will kill the server
      * process if the scheduler ever gets a shutdown signal */
-    GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
-                                  sctx);
+    sctx->shutdown_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task,
+                                                       sctx);
   }
   sctx->my_handlers = GNUNET_malloc (sizeof (defhandlers));
   memcpy (sctx->my_handlers, defhandlers, sizeof (defhandlers));
@@ -1876,6 +1882,11 @@ GNUNET_SERVICE_stop (struct GNUNET_SERVICE_Context *sctx)
 {
   unsigned int i;
 
+  if (GNUNET_SCHEDULER_NO_TASK != sctx->shutdown_task)
+  {
+    GNUNET_SCHEDULER_cancel (sctx->shutdown_task);
+    sctx->shutdown_task = GNUNET_SCHEDULER_NO_TASK;
+  }
   if (NULL != sctx->server)
     GNUNET_SERVER_destroy (sctx->server);
   GNUNET_free_non_null (sctx->my_handlers);
index f64503ea54f80d316cf88a3fa7af7212d649046a..9b43f924dc80f40d4f9a29ead5cc87483f7f3ef0 100644 (file)
@@ -31,7 +31,7 @@
 #include "gnunet_time_lib.h"
 
 
-#define VERBOSE GNUNET_NO
+#define VERBOSE GNUNET_YES
 
 #define PORT 12435
 
@@ -59,6 +59,10 @@ do_stop (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
     GNUNET_SERVICE_stop (sctx);
     sctx = NULL;
   }
+  else
+  {
+    GNUNET_SCHEDULER_shutdown ();
+  }
 }
 
 
@@ -70,6 +74,7 @@ build_msg (void *cls, size_t size, void *buf)
   if (size < sizeof (struct GNUNET_MessageHeader))
   {
     /* timeout */
+    GNUNET_break (0);
     GNUNET_SCHEDULER_add_now (&do_stop, NULL);
     ok = 1;
     return 0;
@@ -273,7 +278,6 @@ main (int argc, char *argv[])
                     NULL);
   ret += check ();
   ret += check ();
-
   // FIXME
 #ifndef MINGW
   s = GNUNET_NETWORK_socket_create (PF_INET6, SOCK_STREAM, 0);
@@ -296,7 +300,6 @@ main (int argc, char *argv[])
     ret += check6 ();
   }
   ret += check_start_stop ();
-
   return ret;
 }