diff options
Diffstat (limited to 'src/transport')
-rw-r--r-- | src/transport/plugin_transport_http.h | 11 | ||||
-rw-r--r-- | src/transport/plugin_transport_http_server.c | 25 |
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 | /** |