aboutsummaryrefslogtreecommitdiff
path: root/src/testbed/gnunet-service-testbed_links.c
diff options
context:
space:
mode:
authorSree Harsha Totakura <totakura@in.tum.de>2013-05-09 09:45:53 +0000
committerSree Harsha Totakura <totakura@in.tum.de>2013-05-09 09:45:53 +0000
commitefad1d6733cd7e75a4e6c846ad7c031a0167b8be (patch)
tree93c8d652b78ae04b5b4a5c8e1e8abe398d4dd8c7 /src/testbed/gnunet-service-testbed_links.c
parentd96c9d244148f2ee984c206b71987ba6df0ec820 (diff)
downloadgnunet-efad1d6733cd7e75a4e6c846ad7c031a0167b8be.tar.gz
gnunet-efad1d6733cd7e75a4e6c846ad7c031a0167b8be.zip
- complement HELPER API with functions to kill and wait on the helper process
- To shutdown quickly, have testbed first kill all sub-controller's helper processes first and wait later instead of kill & wait per each processes.
Diffstat (limited to 'src/testbed/gnunet-service-testbed_links.c')
-rw-r--r--src/testbed/gnunet-service-testbed_links.c57
1 files changed, 36 insertions, 21 deletions
diff --git a/src/testbed/gnunet-service-testbed_links.c b/src/testbed/gnunet-service-testbed_links.c
index bcf8d91c8..7b0006d1f 100644
--- a/src/testbed/gnunet-service-testbed_links.c
+++ b/src/testbed/gnunet-service-testbed_links.c
@@ -425,32 +425,47 @@ reghost_free_iterator (void *cls, const struct GNUNET_HashCode *key,
425void 425void
426GST_slave_list_clear () 426GST_slave_list_clear ()
427{ 427{
428 unsigned int id;
429 struct HostRegistration *hr_entry; 428 struct HostRegistration *hr_entry;
429 struct GNUNET_TESTBED_ControllerProc *cproc;
430 unsigned int id;
430 431
431 for (id = 0; id < GST_slave_list_size; id++) 432 for (id = 0; id < GST_slave_list_size; id++)
432 if (NULL != GST_slave_list[id]) 433 {
434 if (NULL == GST_slave_list[id])
435 continue;
436 while (NULL != (hr_entry = GST_slave_list[id]->hr_dll_head))
433 { 437 {
434 while (NULL != (hr_entry = GST_slave_list[id]->hr_dll_head)) 438 GNUNET_CONTAINER_DLL_remove (GST_slave_list[id]->hr_dll_head,
435 { 439 GST_slave_list[id]->hr_dll_tail, hr_entry);
436 GNUNET_CONTAINER_DLL_remove (GST_slave_list[id]->hr_dll_head, 440 GNUNET_free (hr_entry);
437 GST_slave_list[id]->hr_dll_tail, hr_entry); 441 }
438 GNUNET_free (hr_entry); 442 if (NULL != GST_slave_list[id]->rhandle)
439 } 443 GNUNET_TESTBED_cancel_registration (GST_slave_list[id]->rhandle);
440 if (NULL != GST_slave_list[id]->rhandle) 444 (void)
441 GNUNET_TESTBED_cancel_registration (GST_slave_list[id]->rhandle); 445 GNUNET_CONTAINER_multihashmap_iterate (GST_slave_list
442 (void) 446 [id]->reghost_map,
443 GNUNET_CONTAINER_multihashmap_iterate (GST_slave_list 447 reghost_free_iterator,
444 [id]->reghost_map, 448 GST_slave_list[id]);
445 reghost_free_iterator, 449 GNUNET_CONTAINER_multihashmap_destroy (GST_slave_list[id]->reghost_map);
446 GST_slave_list[id]); 450 if (NULL != GST_slave_list[id]->controller)
447 GNUNET_CONTAINER_multihashmap_destroy (GST_slave_list[id]->reghost_map); 451 GNUNET_TESTBED_controller_disconnect (GST_slave_list[id]->controller);
448 if (NULL != GST_slave_list[id]->controller) 452 if (NULL != (cproc = GST_slave_list[id]->controller_proc))
449 GNUNET_TESTBED_controller_disconnect (GST_slave_list[id]->controller); 453 {
450 if (NULL != GST_slave_list[id]->controller_proc) 454 LOG_DEBUG ("Stopping a slave\n");
451 GNUNET_TESTBED_controller_stop (GST_slave_list[id]->controller_proc); 455 GNUNET_TESTBED_controller_kill_ (cproc);
452 GNUNET_free (GST_slave_list[id]);
453 } 456 }
457 }
458 for (id = 0; id < GST_slave_list_size; id++)
459 {
460 if (NULL == GST_slave_list[id])
461 continue;
462 if (NULL != (cproc = GST_slave_list[id]->controller_proc))
463 {
464 GNUNET_TESTBED_controller_destroy_ (cproc);
465 LOG_DEBUG ("Slave stopped\n");
466 }
467 GNUNET_free (GST_slave_list[id]);
468 }
454 GNUNET_free_non_null (GST_slave_list); 469 GNUNET_free_non_null (GST_slave_list);
455 GST_slave_list = NULL; 470 GST_slave_list = NULL;
456} 471}