diff options
Diffstat (limited to 'source4/selftest/Samba4.pm')
-rw-r--r-- | source4/selftest/Samba4.pm | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/source4/selftest/Samba4.pm b/source4/selftest/Samba4.pm index 07ed12a80f..ec34358e0a 100644 --- a/source4/selftest/Samba4.pm +++ b/source4/selftest/Samba4.pm @@ -514,19 +514,34 @@ sub provision_dc($$) sub teardown_env($$) { my ($self, $envvars) = @_; + my $pid; close(DATA); - sleep(2); - - my $failed = $? >> 8; - if (-f "$envvars->{PIDDIR}/smbd.pid" ) { open(IN, "<$envvars->{PIDDIR}/smbd.pid") or die("unable to open smbd pid file"); - kill 9, <IN>; + $pid = <IN>; close(IN); + + # Give the process 20 seconds to exit. gcov needs + # this time to write out the covarge data + my $count = 0; + until (kill(0, $pid) == 0) { + # if no process sucessfully signalled, then we are done + sleep(1); + $count++; + last if $count > 20; + } + + # If it is still around, kill it + if ($count > 20) { + print "smbd process $pid took more than $count seconds to exit, killing\n"; + kill 9, $pid; + } } + my $failed = $? >> 8; + $self->slapd_stop($envvars) if ($self->{ldap}); print $self->getlog_env($envvars); |