gbproxy: properly shutdown at the end of the test

Destroying at least most of the components in an orderly fashion avoids
at least most of the race conditions during test shutdown.

Change-Id: I2aa4ef8a70c1139893c9621f5a6b6007b221c13d
diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn
index 7811a01..9bd0550 100644
--- a/gbproxy/GBProxy_Tests.ttcn
+++ b/gbproxy/GBProxy_Tests.ttcn
@@ -14,6 +14,7 @@
 
 import from General_Types all;
 import from Osmocom_Types all;
+import from Misc_Helpers all;
 import from GSM_Types all;
 import from Native_Functions all;
 import from NS_Types all;
@@ -398,6 +399,15 @@
 }
 
 
+private function f_destroy_gb(inout GbInstance gb) runs on test_CT {
+	gb.vc_NS.stop;
+	gb.vc_BSSGP.stop;
+
+	for (var integer i := 0; i < lengthof(gb.cfg.bvc); i := i + 1) {
+		gb.vc_BSSGP_BVC[i].stop;
+	}
+}
+
 private function f_init_vty() runs on test_CT {
 	map(self:GBPVTY, system:GBPVTY);
 	f_vty_set_prompts(GBPVTY);
@@ -513,7 +523,16 @@
 }
 
 function f_cleanup() runs on test_CT {
-	self.stop;
+	var integer i;
+
+	for (i := 0; i < lengthof(mp_nsconfig_sgsn); i := i+1) {
+		f_destroy_gb(g_sgsn[i]);
+	}
+	for (i := 0; i < lengthof(mp_nsconfig_pcu); i := i+1) {
+		f_destroy_gb(g_pcu[i]);
+	}
+
+	Misc_Helpers.f_shutdown(__BFILE__, __LINE__, pass);
 }
 
 type function void_fn(charstring id) runs on BSSGP_ConnHdlr;