aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-05-29 12:20:56 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-05-29 12:20:56 +0000
commit4e47209f522210ba808e4f873939440e503a9564 (patch)
tree4a8254a04bc5d4e1e83ffe95dc86ec444da612e2
parentdba0d67804293f61d0e0c082a08f34a0408bbf16 (diff)
downloadgnunet-4e47209f522210ba808e4f873939440e503a9564.tar.gz
gnunet-4e47209f522210ba808e4f873939440e503a9564.zip
- no rescheduling when mhd is scheduled to run asap
-rw-r--r--src/transport/plugin_transport_http.h11
-rw-r--r--src/transport/plugin_transport_http_server.c25
2 files changed, 27 insertions, 9 deletions
diff --git a/src/transport/plugin_transport_http.h b/src/transport/plugin_transport_http.h
index c3c9367ad..986d7d797 100644
--- a/src/transport/plugin_transport_http.h
+++ b/src/transport/plugin_transport_http.h
@@ -226,6 +226,11 @@ struct Plugin
226 GNUNET_SCHEDULER_TaskIdentifier server_v4_task; 226 GNUNET_SCHEDULER_TaskIdentifier server_v4_task;
227 227
228 /** 228 /**
229 * The IPv4 server is scheduled to run asap
230 */
231 int server_v4_immediately;
232
233 /**
229 * MHD IPv6 daemon 234 * MHD IPv6 daemon
230 */ 235 */
231 struct MHD_Daemon *server_v6; 236 struct MHD_Daemon *server_v6;
@@ -236,6 +241,12 @@ struct Plugin
236 GNUNET_SCHEDULER_TaskIdentifier server_v6_task; 241 GNUNET_SCHEDULER_TaskIdentifier server_v6_task;
237 242
238 /** 243 /**
244 * The IPv6 server is scheduled to run asap
245 */
246
247 int server_v6_immediately;
248
249 /**
239 * IPv4 server socket to bind to 250 * IPv4 server socket to bind to
240 */ 251 */
241 struct sockaddr_in *server_addr_v4; 252 struct sockaddr_in *server_addr_v4;
diff --git a/src/transport/plugin_transport_http_server.c b/src/transport/plugin_transport_http_server.c
index 272ecb645..b55c47582 100644
--- a/src/transport/plugin_transport_http_server.c
+++ b/src/transport/plugin_transport_http_server.c
@@ -236,6 +236,12 @@ server_reschedule (struct Plugin *plugin, struct MHD_Daemon *server, int now)
236{ 236{
237 if ((server == plugin->server_v4) && (plugin->server_v4 != NULL)) 237 if ((server == plugin->server_v4) && (plugin->server_v4 != NULL))
238 { 238 {
239 if (GNUNET_YES == plugin->server_v4_immediately)
240 return; /* No rescheduling, server will run asap */
241
242 if (GNUNET_YES == now)
243 plugin->server_v4_immediately = GNUNET_YES;
244
239 if (plugin->server_v4_task != GNUNET_SCHEDULER_NO_TASK) 245 if (plugin->server_v4_task != GNUNET_SCHEDULER_NO_TASK)
240 { 246 {
241 GNUNET_SCHEDULER_cancel (plugin->server_v4_task); 247 GNUNET_SCHEDULER_cancel (plugin->server_v4_task);
@@ -246,6 +252,12 @@ server_reschedule (struct Plugin *plugin, struct MHD_Daemon *server, int now)
246 252
247 if ((server == plugin->server_v6) && (plugin->server_v6 != NULL)) 253 if ((server == plugin->server_v6) && (plugin->server_v6 != NULL))
248 { 254 {
255 if (GNUNET_YES == plugin->server_v6_immediately)
256 return; /* No rescheduling, server will run asap */
257
258 if (GNUNET_YES == now)
259 plugin->server_v6_immediately = GNUNET_YES;
260
249 if (plugin->server_v6_task != GNUNET_SCHEDULER_NO_TASK) 261 if (plugin->server_v6_task != GNUNET_SCHEDULER_NO_TASK)
250 { 262 {
251 GNUNET_SCHEDULER_cancel (plugin->server_v6_task); 263 GNUNET_SCHEDULER_cancel (plugin->server_v6_task);
@@ -917,17 +929,15 @@ server_v4_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
917 GNUNET_assert (cls != NULL); 929 GNUNET_assert (cls != NULL);
918 930
919 plugin->server_v4_task = GNUNET_SCHEDULER_NO_TASK; 931 plugin->server_v4_task = GNUNET_SCHEDULER_NO_TASK;
920
921 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 932 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
922 return; 933 return;
923#if 0 934#if 0
924 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name, 935 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
925 "Running IPv4 server\n"); 936 "Running IPv4 server\n");
926#endif 937#endif
938 plugin->server_v4_immediately = GNUNET_NO;
927 GNUNET_assert (MHD_YES == MHD_run (plugin->server_v4)); 939 GNUNET_assert (MHD_YES == MHD_run (plugin->server_v4));
928 if (plugin->server_v4 != NULL) 940 server_reschedule (plugin, plugin->server_v4, GNUNET_NO);
929 plugin->server_v4_task =
930 server_schedule (plugin, plugin->server_v4, GNUNET_NO);
931} 941}
932 942
933 943
@@ -943,19 +953,16 @@ server_v6_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
943 struct Plugin *plugin = cls; 953 struct Plugin *plugin = cls;
944 954
945 GNUNET_assert (cls != NULL); 955 GNUNET_assert (cls != NULL);
946
947 plugin->server_v6_task = GNUNET_SCHEDULER_NO_TASK; 956 plugin->server_v6_task = GNUNET_SCHEDULER_NO_TASK;
948
949 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) 957 if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
950 return; 958 return;
951#if 0 959#if 0
952 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name, 960 GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,
953 "Running IPv6 server\n"); 961 "Running IPv6 server\n");
954#endif 962#endif
963 plugin->server_v6_immediately = GNUNET_NO;
955 GNUNET_assert (MHD_YES == MHD_run (plugin->server_v6)); 964 GNUNET_assert (MHD_YES == MHD_run (plugin->server_v6));
956 if (plugin->server_v6 != NULL) 965 server_reschedule (plugin, plugin->server_v6, GNUNET_NO);
957 plugin->server_v6_task =
958 server_schedule (plugin, plugin->server_v6, GNUNET_NO);
959} 966}
960 967
961/** 968/**