diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2011-08-23 11:02:19 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2011-08-23 11:02:19 +0000 |
commit | c9654e4d176c3aa052e80dcfde9df3f2c2f08732 (patch) | |
tree | 44d8f2d297b1fb500dd78611c9dad9cf3dda4e8d /src | |
parent | de05ba3f3d7251d17129a3781b67b7a09654b648 (diff) | |
download | gnunet-c9654e4d176c3aa052e80dcfde9df3f2c2f08732.tar.gz gnunet-c9654e4d176c3aa052e80dcfde9df3f2c2f08732.zip |
improved shutdown
Diffstat (limited to 'src')
-rw-r--r-- | src/transport/test_transport_api.c | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/src/transport/test_transport_api.c b/src/transport/test_transport_api.c index 02d80d410..4ce2b7f31 100644 --- a/src/transport/test_transport_api.c +++ b/src/transport/test_transport_api.c | |||
@@ -59,10 +59,14 @@ static int ok; | |||
59 | 59 | ||
60 | static GNUNET_SCHEDULER_TaskIdentifier die_task; | 60 | static GNUNET_SCHEDULER_TaskIdentifier die_task; |
61 | 61 | ||
62 | static GNUNET_SCHEDULER_TaskIdentifier send_task; | ||
63 | |||
62 | struct PeerContext *p1; | 64 | struct PeerContext *p1; |
63 | 65 | ||
64 | struct PeerContext *p2; | 66 | struct PeerContext *p2; |
65 | 67 | ||
68 | static GNUNET_TRANSPORT_TESTING_ConnectRequest cc; | ||
69 | |||
66 | struct GNUNET_TRANSPORT_TransmitHandle *th; | 70 | struct GNUNET_TRANSPORT_TransmitHandle *th; |
67 | 71 | ||
68 | char *cfg_file_p1; | 72 | char *cfg_file_p1; |
@@ -81,6 +85,9 @@ end () | |||
81 | { | 85 | { |
82 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peers\n"); | 86 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peers\n"); |
83 | 87 | ||
88 | if (send_task != GNUNET_SCHEDULER_NO_TASK) | ||
89 | GNUNET_SCHEDULER_cancel (send_task); | ||
90 | |||
84 | if (die_task != GNUNET_SCHEDULER_NO_TASK) | 91 | if (die_task != GNUNET_SCHEDULER_NO_TASK) |
85 | GNUNET_SCHEDULER_cancel (die_task); | 92 | GNUNET_SCHEDULER_cancel (die_task); |
86 | 93 | ||
@@ -93,13 +100,17 @@ end () | |||
93 | } | 100 | } |
94 | 101 | ||
95 | static void | 102 | static void |
96 | end_badly () | 103 | end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
97 | { | 104 | { |
98 | if (die_task != GNUNET_SCHEDULER_NO_TASK) | ||
99 | GNUNET_SCHEDULER_cancel (die_task); | ||
100 | |||
101 | die_task = GNUNET_SCHEDULER_NO_TASK; | 105 | die_task = GNUNET_SCHEDULER_NO_TASK; |
102 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n"); | 106 | |
107 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Stopping peers\n"); | ||
108 | |||
109 | if (send_task != GNUNET_SCHEDULER_NO_TASK) | ||
110 | GNUNET_SCHEDULER_cancel (send_task); | ||
111 | |||
112 | if (cc != NULL) | ||
113 | GNUNET_TRANSPORT_TESTING_connect_peers_cancel(cc); | ||
103 | 114 | ||
104 | if (th != NULL) | 115 | if (th != NULL) |
105 | GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); | 116 | GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); |
@@ -111,6 +122,7 @@ end_badly () | |||
111 | GNUNET_TRANSPORT_TESTING_stop_peer (p2); | 122 | GNUNET_TRANSPORT_TESTING_stop_peer (p2); |
112 | 123 | ||
113 | ok = GNUNET_SYSERR; | 124 | ok = GNUNET_SYSERR; |
125 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Stopping peers END\n"); | ||
114 | } | 126 | } |
115 | 127 | ||
116 | 128 | ||
@@ -180,8 +192,13 @@ notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) | |||
180 | } | 192 | } |
181 | 193 | ||
182 | static void | 194 | static void |
183 | sendtask () | 195 | sendtask (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) |
184 | { | 196 | { |
197 | send_task = GNUNET_SCHEDULER_NO_TASK; | ||
198 | |||
199 | if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0) | ||
200 | return; | ||
201 | |||
185 | th = GNUNET_TRANSPORT_notify_transmit_ready (p1->th, &p2->id, 256, 0, TIMEOUT, | 202 | th = GNUNET_TRANSPORT_notify_transmit_ready (p1->th, &p2->id, 256, 0, TIMEOUT, |
186 | ¬ify_ready, &p1); | 203 | ¬ify_ready, &p1); |
187 | } | 204 | } |
@@ -189,6 +206,7 @@ sendtask () | |||
189 | static void | 206 | static void |
190 | testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls) | 207 | testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls) |
191 | { | 208 | { |
209 | cc = NULL; | ||
192 | char *p1_c = strdup (GNUNET_i2s (&p1->id)); | 210 | char *p1_c = strdup (GNUNET_i2s (&p1->id)); |
193 | 211 | ||
194 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peers connected: %s <-> %s\n", p1_c, | 212 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peers connected: %s <-> %s\n", p1_c, |
@@ -196,7 +214,8 @@ testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls) | |||
196 | GNUNET_free (p1_c); | 214 | GNUNET_free (p1_c); |
197 | 215 | ||
198 | // FIXME: THIS IS REQUIRED! SEEMS TO BE A BUG! | 216 | // FIXME: THIS IS REQUIRED! SEEMS TO BE A BUG! |
199 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &sendtask, NULL); | 217 | send_task = |
218 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &sendtask, NULL); | ||
200 | } | 219 | } |
201 | 220 | ||
202 | static void | 221 | static void |
@@ -211,8 +230,8 @@ run (void *cls, char *const *args, const char *cfgfile, | |||
211 | p2 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p2, ¬ify_receive, | 230 | p2 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p2, ¬ify_receive, |
212 | ¬ify_connect, ¬ify_disconnect, | 231 | ¬ify_connect, ¬ify_disconnect, |
213 | NULL); | 232 | NULL); |
214 | 233 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "NOW!\n"); | |
215 | GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb, NULL); | 234 | cc = GNUNET_TRANSPORT_TESTING_connect_peers (p1, p2, &testing_connect_cb, NULL); |
216 | } | 235 | } |
217 | 236 | ||
218 | static int | 237 | static int |
@@ -233,6 +252,8 @@ check () | |||
233 | #if WRITECONFIG | 252 | #if WRITECONFIG |
234 | setTransportOptions ("test_transport_api_data.conf"); | 253 | setTransportOptions ("test_transport_api_data.conf"); |
235 | #endif | 254 | #endif |
255 | send_task = GNUNET_SCHEDULER_NO_TASK; | ||
256 | |||
236 | ok = 1; | 257 | ok = 1; |
237 | GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv, | 258 | GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv, |
238 | "test-transport-api", "nohelp", options, &run, &ok); | 259 | "test-transport-api", "nohelp", options, &run, &ok); |