diff options
author | Nathan S. Evans <evans@in.tum.de> | 2010-11-05 18:21:50 +0000 |
---|---|---|
committer | Nathan S. Evans <evans@in.tum.de> | 2010-11-05 18:21:50 +0000 |
commit | 75a33a1499cf60ea4364c9aa673816629a6c1413 (patch) | |
tree | 0620da4312bb04de4d7b65074fdd3b0c3dd6cc0e /src/util/server.c | |
parent | 7217c601ad30760872823193d62307e7a335d226 (diff) | |
download | gnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.tar.gz gnunet-75a33a1499cf60ea4364c9aa673816629a6c1413.zip |
big scheduler refactoring, expect some issues
Diffstat (limited to 'src/util/server.c')
-rw-r--r-- | src/util/server.c | 39 |
1 files changed, 11 insertions, 28 deletions
diff --git a/src/util/server.c b/src/util/server.c index 516885fed..f586e4204 100644 --- a/src/util/server.c +++ b/src/util/server.c | |||
@@ -80,11 +80,6 @@ struct NotifyList | |||
80 | struct GNUNET_SERVER_Handle | 80 | struct GNUNET_SERVER_Handle |
81 | { | 81 | { |
82 | /** | 82 | /** |
83 | * My scheduler. | ||
84 | */ | ||
85 | struct GNUNET_SCHEDULER_Handle *sched; | ||
86 | |||
87 | /** | ||
88 | * List of handlers for incoming messages. | 83 | * List of handlers for incoming messages. |
89 | */ | 84 | */ |
90 | struct HandlerList *handlers; | 85 | struct HandlerList *handlers; |
@@ -249,8 +244,7 @@ process_listen_socket (void *cls, | |||
249 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) | 244 | if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN)) |
250 | { | 245 | { |
251 | /* ignore shutdown, someone else will take care of it! */ | 246 | /* ignore shutdown, someone else will take care of it! */ |
252 | server->listen_task = GNUNET_SCHEDULER_add_select (server->sched, | 247 | server->listen_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH, |
253 | GNUNET_SCHEDULER_PRIORITY_HIGH, | ||
254 | GNUNET_SCHEDULER_NO_TASK, | 248 | GNUNET_SCHEDULER_NO_TASK, |
255 | GNUNET_TIME_UNIT_FOREVER_REL, | 249 | GNUNET_TIME_UNIT_FOREVER_REL, |
256 | r, NULL, | 250 | r, NULL, |
@@ -266,7 +260,7 @@ process_listen_socket (void *cls, | |||
266 | (tc->read_ready, server->listen_sockets[i])) | 260 | (tc->read_ready, server->listen_sockets[i])) |
267 | { | 261 | { |
268 | sock = | 262 | sock = |
269 | GNUNET_CONNECTION_create_from_accept (tc->sched, server->access, | 263 | GNUNET_CONNECTION_create_from_accept (server->access, |
270 | server->access_cls, | 264 | server->access_cls, |
271 | server->listen_sockets[i]); | 265 | server->listen_sockets[i]); |
272 | if (sock != NULL) | 266 | if (sock != NULL) |
@@ -285,8 +279,7 @@ process_listen_socket (void *cls, | |||
285 | i++; | 279 | i++; |
286 | } | 280 | } |
287 | /* listen for more! */ | 281 | /* listen for more! */ |
288 | server->listen_task = GNUNET_SCHEDULER_add_select (server->sched, | 282 | server->listen_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH, |
289 | GNUNET_SCHEDULER_PRIORITY_HIGH, | ||
290 | GNUNET_SCHEDULER_NO_TASK, | 283 | GNUNET_SCHEDULER_NO_TASK, |
291 | GNUNET_TIME_UNIT_FOREVER_REL, | 284 | GNUNET_TIME_UNIT_FOREVER_REL, |
292 | r, NULL, | 285 | r, NULL, |
@@ -386,7 +379,6 @@ open_listen_socket (const struct sockaddr *serverAddr, socklen_t socklen) | |||
386 | /** | 379 | /** |
387 | * Create a new server. | 380 | * Create a new server. |
388 | * | 381 | * |
389 | * @param sched scheduler to use | ||
390 | * @param access function for access control | 382 | * @param access function for access control |
391 | * @param access_cls closure for access | 383 | * @param access_cls closure for access |
392 | * @param lsocks NULL-terminated array of listen sockets | 384 | * @param lsocks NULL-terminated array of listen sockets |
@@ -397,8 +389,7 @@ open_listen_socket (const struct sockaddr *serverAddr, socklen_t socklen) | |||
397 | * (typically, "port" already in use) | 389 | * (typically, "port" already in use) |
398 | */ | 390 | */ |
399 | struct GNUNET_SERVER_Handle * | 391 | struct GNUNET_SERVER_Handle * |
400 | GNUNET_SERVER_create_with_sockets (struct GNUNET_SCHEDULER_Handle *sched, | 392 | GNUNET_SERVER_create_with_sockets (GNUNET_CONNECTION_AccessCheck access, void *access_cls, |
401 | GNUNET_CONNECTION_AccessCheck access, void *access_cls, | ||
402 | struct GNUNET_NETWORK_Handle **lsocks, | 393 | struct GNUNET_NETWORK_Handle **lsocks, |
403 | struct GNUNET_TIME_Relative | 394 | struct GNUNET_TIME_Relative |
404 | idle_timeout, | 395 | idle_timeout, |
@@ -409,7 +400,6 @@ GNUNET_SERVER_create_with_sockets (struct GNUNET_SCHEDULER_Handle *sched, | |||
409 | int i; | 400 | int i; |
410 | 401 | ||
411 | ret = GNUNET_malloc (sizeof (struct GNUNET_SERVER_Handle)); | 402 | ret = GNUNET_malloc (sizeof (struct GNUNET_SERVER_Handle)); |
412 | ret->sched = sched; | ||
413 | ret->idle_timeout = idle_timeout; | 403 | ret->idle_timeout = idle_timeout; |
414 | ret->listen_sockets = lsocks; | 404 | ret->listen_sockets = lsocks; |
415 | ret->access = access; | 405 | ret->access = access; |
@@ -421,8 +411,7 @@ GNUNET_SERVER_create_with_sockets (struct GNUNET_SCHEDULER_Handle *sched, | |||
421 | i = 0; | 411 | i = 0; |
422 | while (NULL != ret->listen_sockets[i]) | 412 | while (NULL != ret->listen_sockets[i]) |
423 | GNUNET_NETWORK_fdset_set (r, ret->listen_sockets[i++]); | 413 | GNUNET_NETWORK_fdset_set (r, ret->listen_sockets[i++]); |
424 | ret->listen_task = GNUNET_SCHEDULER_add_select (sched, | 414 | ret->listen_task = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_HIGH, |
425 | GNUNET_SCHEDULER_PRIORITY_HIGH, | ||
426 | GNUNET_SCHEDULER_NO_TASK, | 415 | GNUNET_SCHEDULER_NO_TASK, |
427 | GNUNET_TIME_UNIT_FOREVER_REL, | 416 | GNUNET_TIME_UNIT_FOREVER_REL, |
428 | r, NULL, | 417 | r, NULL, |
@@ -437,7 +426,6 @@ GNUNET_SERVER_create_with_sockets (struct GNUNET_SCHEDULER_Handle *sched, | |||
437 | /** | 426 | /** |
438 | * Create a new server. | 427 | * Create a new server. |
439 | * | 428 | * |
440 | * @param sched scheduler to use | ||
441 | * @param access function for access control | 429 | * @param access function for access control |
442 | * @param access_cls closure for access | 430 | * @param access_cls closure for access |
443 | * @param serverAddr address to listen on (including port), NULL terminated array | 431 | * @param serverAddr address to listen on (including port), NULL terminated array |
@@ -449,8 +437,7 @@ GNUNET_SERVER_create_with_sockets (struct GNUNET_SCHEDULER_Handle *sched, | |||
449 | * (typically, "port" already in use) | 437 | * (typically, "port" already in use) |
450 | */ | 438 | */ |
451 | struct GNUNET_SERVER_Handle * | 439 | struct GNUNET_SERVER_Handle * |
452 | GNUNET_SERVER_create (struct GNUNET_SCHEDULER_Handle *sched, | 440 | GNUNET_SERVER_create (GNUNET_CONNECTION_AccessCheck access, |
453 | GNUNET_CONNECTION_AccessCheck access, | ||
454 | void *access_cls, | 441 | void *access_cls, |
455 | struct sockaddr *const *serverAddr, | 442 | struct sockaddr *const *serverAddr, |
456 | const socklen_t * socklen, | 443 | const socklen_t * socklen, |
@@ -489,8 +476,7 @@ GNUNET_SERVER_create (struct GNUNET_SCHEDULER_Handle *sched, | |||
489 | { | 476 | { |
490 | lsocks = NULL; | 477 | lsocks = NULL; |
491 | } | 478 | } |
492 | return GNUNET_SERVER_create_with_sockets (sched, | 479 | return GNUNET_SERVER_create_with_sockets (access, access_cls, |
493 | access, access_cls, | ||
494 | lsocks, | 480 | lsocks, |
495 | idle_timeout, | 481 | idle_timeout, |
496 | require_found); | 482 | require_found); |
@@ -514,7 +500,7 @@ GNUNET_SERVER_destroy (struct GNUNET_SERVER_Handle *s) | |||
514 | #endif | 500 | #endif |
515 | if (GNUNET_SCHEDULER_NO_TASK != s->listen_task) | 501 | if (GNUNET_SCHEDULER_NO_TASK != s->listen_task) |
516 | { | 502 | { |
517 | GNUNET_SCHEDULER_cancel (s->sched, s->listen_task); | 503 | GNUNET_SCHEDULER_cancel (s->listen_task); |
518 | s->listen_task = GNUNET_SCHEDULER_NO_TASK; | 504 | s->listen_task = GNUNET_SCHEDULER_NO_TASK; |
519 | } | 505 | } |
520 | if (s->listen_sockets != NULL) | 506 | if (s->listen_sockets != NULL) |
@@ -1023,8 +1009,7 @@ GNUNET_SERVER_client_disconnect (struct GNUNET_SERVER_Client *client) | |||
1023 | #endif | 1009 | #endif |
1024 | if (client->restart_task != GNUNET_SCHEDULER_NO_TASK) | 1010 | if (client->restart_task != GNUNET_SCHEDULER_NO_TASK) |
1025 | { | 1011 | { |
1026 | GNUNET_SCHEDULER_cancel (client->server->sched, | 1012 | GNUNET_SCHEDULER_cancel (client->restart_task); |
1027 | client->restart_task); | ||
1028 | client->restart_task = GNUNET_SCHEDULER_NO_TASK; | 1013 | client->restart_task = GNUNET_SCHEDULER_NO_TASK; |
1029 | } | 1014 | } |
1030 | if (GNUNET_YES == client->receive_pending) | 1015 | if (GNUNET_YES == client->receive_pending) |
@@ -1053,8 +1038,7 @@ GNUNET_SERVER_client_disconnect (struct GNUNET_SERVER_Client *client) | |||
1053 | prev->next = pos->next; | 1038 | prev->next = pos->next; |
1054 | if (client->restart_task != GNUNET_SCHEDULER_NO_TASK) | 1039 | if (client->restart_task != GNUNET_SCHEDULER_NO_TASK) |
1055 | { | 1040 | { |
1056 | GNUNET_SCHEDULER_cancel (server->sched, | 1041 | GNUNET_SCHEDULER_cancel (client->restart_task); |
1057 | client->restart_task); | ||
1058 | client->restart_task = GNUNET_SCHEDULER_NO_TASK; | 1042 | client->restart_task = GNUNET_SCHEDULER_NO_TASK; |
1059 | } | 1043 | } |
1060 | n = server->disconnect_notify_list; | 1044 | n = server->disconnect_notify_list; |
@@ -1182,8 +1166,7 @@ GNUNET_SERVER_receive_done (struct GNUNET_SERVER_Client *client, int success) | |||
1182 | "GNUNET_SERVER_receive_done causes restart in reading from the socket\n"); | 1166 | "GNUNET_SERVER_receive_done causes restart in reading from the socket\n"); |
1183 | #endif | 1167 | #endif |
1184 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == client->restart_task); | 1168 | GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == client->restart_task); |
1185 | client->restart_task = GNUNET_SCHEDULER_add_now (client->server->sched, | 1169 | client->restart_task = GNUNET_SCHEDULER_add_now (&restart_processing, |
1186 | &restart_processing, | ||
1187 | client); | 1170 | client); |
1188 | } | 1171 | } |
1189 | 1172 | ||