aboutsummaryrefslogtreecommitdiff
path: root/src/testbed/testbed_api_peers.c
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2013-03-28 12:05:37 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2013-03-28 12:05:37 +0000
commitf1a6f1b56d25ac17f5486f48576cb2accd49c97e (patch)
tree022a7ad54cc53d3f145d6c125151c47c5c9e05ef /src/testbed/testbed_api_peers.c
parent77b9205f561d168d7be860676144a47997014907 (diff)
downloadgnunet-f1a6f1b56d25ac17f5486f48576cb2accd49c97e.tar.gz
gnunet-f1a6f1b56d25ac17f5486f48576cb2accd49c97e.zip
- fix DLL removals while cleaning up operation contexts
Diffstat (limited to 'src/testbed/testbed_api_peers.c')
-rw-r--r--src/testbed/testbed_api_peers.c72
1 files changed, 44 insertions, 28 deletions
diff --git a/src/testbed/testbed_api_peers.c b/src/testbed/testbed_api_peers.c
index cbf2f2385..8944ec776 100644
--- a/src/testbed/testbed_api_peers.c
+++ b/src/testbed/testbed_api_peers.c
@@ -105,9 +105,8 @@ opstart_peer_create (void *cls)
105 size_t xc_size; 105 size_t xc_size;
106 uint16_t msize; 106 uint16_t msize;
107 107
108 GNUNET_assert (OP_PEER_CREATE == opc->type); 108 GNUNET_assert (OP_PEER_CREATE == opc->type);
109 data = opc->data; 109 GNUNET_assert (NULL != (data = opc->data));
110 GNUNET_assert (NULL != data);
111 GNUNET_assert (NULL != data->peer); 110 GNUNET_assert (NULL != data->peer);
112 opc->state = OPC_STATE_STARTED; 111 opc->state = OPC_STATE_STARTED;
113 config = GNUNET_CONFIGURATION_serialize (data->cfg, &c_size); 112 config = GNUNET_CONFIGURATION_serialize (data->cfg, &c_size);
@@ -166,8 +165,7 @@ opstart_peer_destroy (void *cls)
166 struct GNUNET_TESTBED_PeerDestroyMessage *msg; 165 struct GNUNET_TESTBED_PeerDestroyMessage *msg;
167 166
168 GNUNET_assert (OP_PEER_DESTROY == opc->type); 167 GNUNET_assert (OP_PEER_DESTROY == opc->type);
169 peer = opc->data; 168 GNUNET_assert (NULL != (peer = opc->data));
170 GNUNET_assert (NULL != peer);
171 opc->state = OPC_STATE_STARTED; 169 opc->state = OPC_STATE_STARTED;
172 msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerDestroyMessage)); 170 msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerDestroyMessage));
173 msg->header.size = htons (sizeof (struct GNUNET_TESTBED_PeerDestroyMessage)); 171 msg->header.size = htons (sizeof (struct GNUNET_TESTBED_PeerDestroyMessage));
@@ -189,8 +187,16 @@ oprelease_peer_destroy (void *cls)
189{ 187{
190 struct OperationContext *opc = cls; 188 struct OperationContext *opc = cls;
191 189
192 if (OPC_STATE_FINISHED != opc->state) 190 switch (opc->state)
191 {
192 case OPC_STATE_STARTED:
193 GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc); 193 GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
194 /* no break; continue */
195 case OPC_STATE_INIT:
196 break;
197 case OPC_STATE_FINISHED:
198 break;
199 }
194 GNUNET_free (opc); 200 GNUNET_free (opc);
195} 201}
196 202
@@ -209,10 +215,8 @@ opstart_peer_start (void *cls)
209 struct GNUNET_TESTBED_Peer *peer; 215 struct GNUNET_TESTBED_Peer *peer;
210 216
211 GNUNET_assert (OP_PEER_START == opc->type); 217 GNUNET_assert (OP_PEER_START == opc->type);
212 GNUNET_assert (NULL != opc->data); 218 GNUNET_assert (NULL != (data = opc->data));
213 data = opc->data; 219 GNUNET_assert (NULL != (peer = data->peer));
214 GNUNET_assert (NULL != data->peer);
215 peer = data->peer;
216 GNUNET_assert ((PS_CREATED == peer->state) || (PS_STOPPED == peer->state)); 220 GNUNET_assert ((PS_CREATED == peer->state) || (PS_STOPPED == peer->state));
217 opc->state = OPC_STATE_STARTED; 221 opc->state = OPC_STATE_STARTED;
218 msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerStartMessage)); 222 msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerStartMessage));
@@ -235,10 +239,16 @@ oprelease_peer_start (void *cls)
235{ 239{
236 struct OperationContext *opc = cls; 240 struct OperationContext *opc = cls;
237 241
238 if (OPC_STATE_FINISHED != opc->state) 242 switch (opc->state)
239 { 243 {
240 GNUNET_free (opc->data); 244 case OPC_STATE_STARTED:
241 GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc); 245 GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
246 /* no break; continue */
247 case OPC_STATE_INIT:
248 GNUNET_free (opc->data);
249 break;
250 case OPC_STATE_FINISHED:
251 break;
242 } 252 }
243 GNUNET_free (opc); 253 GNUNET_free (opc);
244} 254}
@@ -257,10 +267,8 @@ opstart_peer_stop (void *cls)
257 struct PeerEventData *data; 267 struct PeerEventData *data;
258 struct GNUNET_TESTBED_Peer *peer; 268 struct GNUNET_TESTBED_Peer *peer;
259 269
260 GNUNET_assert (NULL != opc->data); 270 GNUNET_assert (NULL != (data = opc->data));
261 data = opc->data; 271 GNUNET_assert (NULL != (peer = data->peer));
262 GNUNET_assert (NULL != data->peer);
263 peer = data->peer;
264 GNUNET_assert (PS_STARTED == peer->state); 272 GNUNET_assert (PS_STARTED == peer->state);
265 opc->state = OPC_STATE_STARTED; 273 opc->state = OPC_STATE_STARTED;
266 msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerStopMessage)); 274 msg = GNUNET_malloc (sizeof (struct GNUNET_TESTBED_PeerStopMessage));
@@ -283,10 +291,16 @@ oprelease_peer_stop (void *cls)
283{ 291{
284 struct OperationContext *opc = cls; 292 struct OperationContext *opc = cls;
285 293
286 if (OPC_STATE_FINISHED != opc->state) 294 switch (opc->state)
287 { 295 {
288 GNUNET_free (opc->data); 296 case OPC_STATE_STARTED:
289 GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc); 297 GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
298 /* no break; continue */
299 case OPC_STATE_INIT:
300 GNUNET_free (opc->data);
301 break;
302 case OPC_STATE_FINISHED:
303 break;
290 } 304 }
291 GNUNET_free (opc); 305 GNUNET_free (opc);
292} 306}
@@ -330,8 +344,7 @@ opstart_peer_getinfo (void *cls)
330 struct PeerInfoData *data; 344 struct PeerInfoData *data;
331 struct GNUNET_TESTBED_PeerGetConfigurationMessage *msg; 345 struct GNUNET_TESTBED_PeerGetConfigurationMessage *msg;
332 346
333 data = opc->data; 347 GNUNET_assert (NULL != (data = opc->data));
334 GNUNET_assert (NULL != data);
335 opc->state = OPC_STATE_STARTED; 348 opc->state = OPC_STATE_STARTED;
336 msg = 349 msg =
337 GNUNET_TESTBED_generate_peergetconfig_msg_ (data->peer->unique_id, 350 GNUNET_TESTBED_generate_peergetconfig_msg_ (data->peer->unique_id,
@@ -352,19 +365,21 @@ oprelease_peer_getinfo (void *cls)
352 struct OperationContext *opc = cls; 365 struct OperationContext *opc = cls;
353 struct GNUNET_TESTBED_PeerInformation *data; 366 struct GNUNET_TESTBED_PeerInformation *data;
354 367
355 if (OPC_STATE_FINISHED != opc->state) 368 switch (opc->state)
356 { 369 {
357 GNUNET_free_non_null (opc->data); 370 case OPC_STATE_STARTED:
358 GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc); 371 GNUNET_CONTAINER_DLL_remove (opc->c->ocq_head, opc->c->ocq_tail, opc);
359 } 372 /* no break; continue */
360 else 373 case OPC_STATE_INIT:
361 { 374 GNUNET_free (opc->data);
362 data = opc->data; 375 break;
363 GNUNET_assert (NULL != data); 376 case OPC_STATE_FINISHED:
377 GNUNET_assert (NULL != (data = opc->data));
364 switch (data->pit) 378 switch (data->pit)
365 { 379 {
366 case GNUNET_TESTBED_PIT_CONFIGURATION: 380 case GNUNET_TESTBED_PIT_CONFIGURATION:
367 GNUNET_CONFIGURATION_destroy (data->result.cfg); 381 if (NULL != data->result.cfg)
382 GNUNET_CONFIGURATION_destroy (data->result.cfg);
368 break; 383 break;
369 case GNUNET_TESTBED_PIT_IDENTITY: 384 case GNUNET_TESTBED_PIT_IDENTITY:
370 GNUNET_free (data->result.id); 385 GNUNET_free (data->result.id);
@@ -373,6 +388,7 @@ oprelease_peer_getinfo (void *cls)
373 GNUNET_assert (0); /* We should never reach here */ 388 GNUNET_assert (0); /* We should never reach here */
374 } 389 }
375 GNUNET_free (data); 390 GNUNET_free (data);
391 break;
376 } 392 }
377 GNUNET_free (opc); 393 GNUNET_free (opc);
378} 394}