summaryrefslogtreecommitdiff
path: root/pool/static_pool.go
diff options
context:
space:
mode:
Diffstat (limited to 'pool/static_pool.go')
-rwxr-xr-xpool/static_pool.go18
1 files changed, 14 insertions, 4 deletions
diff --git a/pool/static_pool.go b/pool/static_pool.go
index 9897b9e7..4906788f 100755
--- a/pool/static_pool.go
+++ b/pool/static_pool.go
@@ -318,8 +318,7 @@ func (sp *StaticPool) execDebug(p *payload.Payload) (*payload.Payload, error) {
}()
// destroy the worker
- sw.State().Set(worker.StateDestroyed)
- err = sw.Kill()
+ err = sw.Stop()
if err != nil {
sp.events.Send(events.NewEvent(events.EventWorkerError, pluginName, fmt.Sprintf("error: %s, worker's pid: %d", err, sw.Pid())))
return nil, err
@@ -337,8 +336,19 @@ func (sp *StaticPool) execDebugWithTTL(ctx context.Context, p *payload.Payload)
// redirect call to the worker with TTL
r, err := sw.ExecWithTTL(ctx, p)
- if stopErr := sw.Stop(); stopErr != nil {
- sp.events.Send(events.NewEvent(events.EventWorkerError, pluginName, fmt.Sprintf("error: %s, pid: %d", err, sw.Pid())))
+ if err != nil {
+ return nil, err
+ }
+
+ go func() {
+ // read the exit status to prevent process to be a zombie
+ _ = sw.Wait()
+ }()
+
+ err = sw.Stop()
+ if err != nil {
+ sp.events.Send(events.NewEvent(events.EventWorkerError, pluginName, fmt.Sprintf("error: %s, worker's pid: %d", err, sw.Pid())))
+ return nil, err
}
return r, err