- no rescheduling when mhd is scheduled to run asap
authorMatthias Wachs <wachs@net.in.tum.de>
Tue, 29 May 2012 12:20:56 +0000 (12:20 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Tue, 29 May 2012 12:20:56 +0000 (12:20 +0000)
src/transport/plugin_transport_http.h
src/transport/plugin_transport_http_server.c

index c3c9367ad7b81ed48e831259e37330760131db15..986d7d7975cabb985cdacabae53e990bce9cbf66 100644 (file)
@@ -225,6 +225,11 @@ struct Plugin
    */
   GNUNET_SCHEDULER_TaskIdentifier server_v4_task;
 
+  /**
+   * The IPv4 server is scheduled to run asap
+   */
+  int server_v4_immediately;
+
   /**
    * MHD IPv6 daemon
    */
@@ -235,6 +240,12 @@ struct Plugin
    */
   GNUNET_SCHEDULER_TaskIdentifier server_v6_task;
 
+  /**
+   * The IPv6 server is scheduled to run asap
+   */
+
+  int server_v6_immediately;
+
   /**
    * IPv4 server socket to bind to
    */
index 272ecb6453a79c2afd440ae3cded50ab1d85d7ce..b55c47582083385c44d753330404403e9204a7d0 100644 (file)
@@ -236,6 +236,12 @@ server_reschedule (struct Plugin *plugin, struct MHD_Daemon *server, int now)
 {
   if ((server == plugin->server_v4) && (plugin->server_v4 != NULL))
   {
+    if (GNUNET_YES == plugin->server_v4_immediately)
+      return; /* No rescheduling, server will run asap */
+
+    if (GNUNET_YES == now)
+      plugin->server_v4_immediately = GNUNET_YES;
+
     if (plugin->server_v4_task != GNUNET_SCHEDULER_NO_TASK)
     {
       GNUNET_SCHEDULER_cancel (plugin->server_v4_task);
@@ -246,6 +252,12 @@ server_reschedule (struct Plugin *plugin, struct MHD_Daemon *server, int now)
 
   if ((server == plugin->server_v6) && (plugin->server_v6 != NULL))
   {
+    if (GNUNET_YES == plugin->server_v6_immediately)
+      return; /* No rescheduling, server will run asap */
+
+    if (GNUNET_YES == now)
+      plugin->server_v6_immediately = GNUNET_YES;
+
     if (plugin->server_v6_task != GNUNET_SCHEDULER_NO_TASK)
     {
       GNUNET_SCHEDULER_cancel (plugin->server_v6_task);
@@ -917,17 +929,15 @@ server_v4_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   GNUNET_assert (cls != NULL);
 
   plugin->server_v4_task = GNUNET_SCHEDULER_NO_TASK;
-
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
     return;
 #if 0
   GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
                    "Running IPv4 server\n");
 #endif
+  plugin->server_v4_immediately = GNUNET_NO;
   GNUNET_assert (MHD_YES == MHD_run (plugin->server_v4));
-  if (plugin->server_v4 != NULL)
-    plugin->server_v4_task =
-        server_schedule (plugin, plugin->server_v4, GNUNET_NO);
+  server_reschedule (plugin, plugin->server_v4, GNUNET_NO);
 }
 
 
@@ -943,19 +953,16 @@ server_v6_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   struct Plugin *plugin = cls;
 
   GNUNET_assert (cls != NULL);
-
   plugin->server_v6_task = GNUNET_SCHEDULER_NO_TASK;
-
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
     return;
 #if 0
   GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
                    "Running IPv6 server\n");
 #endif
+  plugin->server_v6_immediately = GNUNET_NO;
   GNUNET_assert (MHD_YES == MHD_run (plugin->server_v6));
-  if (plugin->server_v6 != NULL)
-    plugin->server_v6_task =
-        server_schedule (plugin, plugin->server_v6, GNUNET_NO);
+  server_reschedule (plugin, plugin->server_v6, GNUNET_NO);
 }
 
 /**