aboutsummaryrefslogtreecommitdiff
path: root/src/transport/test_transport_api.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2011-08-23 11:02:19 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2011-08-23 11:02:19 +0000
commitc9654e4d176c3aa052e80dcfde9df3f2c2f08732 (patch)
tree44d8f2d297b1fb500dd78611c9dad9cf3dda4e8d /src/transport/test_transport_api.c
parentde05ba3f3d7251d17129a3781b67b7a09654b648 (diff)
downloadgnunet-c9654e4d176c3aa052e80dcfde9df3f2c2f08732.tar.gz
gnunet-c9654e4d176c3aa052e80dcfde9df3f2c2f08732.zip
improved shutdown
Diffstat (limited to 'src/transport/test_transport_api.c')
-rw-r--r--src/transport/test_transport_api.c39
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
60static GNUNET_SCHEDULER_TaskIdentifier die_task; 60static GNUNET_SCHEDULER_TaskIdentifier die_task;
61 61
62static GNUNET_SCHEDULER_TaskIdentifier send_task;
63
62struct PeerContext *p1; 64struct PeerContext *p1;
63 65
64struct PeerContext *p2; 66struct PeerContext *p2;
65 67
68static GNUNET_TRANSPORT_TESTING_ConnectRequest cc;
69
66struct GNUNET_TRANSPORT_TransmitHandle *th; 70struct GNUNET_TRANSPORT_TransmitHandle *th;
67 71
68char *cfg_file_p1; 72char *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
95static void 102static void
96end_badly () 103end_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
182static void 194static void
183sendtask () 195sendtask (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 &notify_ready, &p1); 203 &notify_ready, &p1);
187} 204}
@@ -189,6 +206,7 @@ sendtask ()
189static void 206static void
190testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls) 207testing_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
202static void 221static void
@@ -211,8 +230,8 @@ run (void *cls, char *const *args, const char *cfgfile,
211 p2 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p2, &notify_receive, 230 p2 = GNUNET_TRANSPORT_TESTING_start_peer (cfg_file_p2, &notify_receive,
212 &notify_connect, &notify_disconnect, 231 &notify_connect, &notify_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
218static int 237static 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);