chiark / gitweb /
stest: Use `finish' for success exits
[secnet.git] / stest / common.tcl
index 064d8740fe245b9295e2688dfc618f641d448b6d..d6250c3b7b14df30ce86ba677d62407d1a1b9054 100644 (file)
@@ -111,6 +111,7 @@ proc spawn-secnet {location site} {
     global builddir
     global netlinkfh
     global env
+    global pidmap
     upvar #0 pids($site) pid
     set cf $tmp/$site.conf
     set ch [open $cf w]
@@ -145,6 +146,7 @@ proc spawn-secnet {location site} {
     }
     if {[llength $argl]} { 
        set pid [fork]
+       set pidmap($pid) "secnet $location/$site"
        if {!$pid} {
            execl [lindex $argl 0] [lrange $argl 1 end]
        }
@@ -159,8 +161,7 @@ proc netlink-readable {location site} {
     switch -exact $site {
        inside {
            puts OK
-           set ok 1; # what a bodge
-           return
+           finish 0
        }
        outside {
            error "inside rx'd!"
@@ -208,6 +209,11 @@ prefix_preload $builddir/stest/udp-preload.so
 
 proc finish {estatus} {
     puts stderr "FINISHING $estatus"
+    signal default SIGCHLD
+    global pidmap
+    foreach pid [array names pidmap] {
+       kill KILL $pid
+    }
     exit $estatus
 }