From 2a58b1be2c79f2fe10c0a429878937661645a928 Mon Sep 17 00:00:00 2001 From: Valery Piashchynski Date: Sun, 28 Mar 2021 14:00:54 +0300 Subject: - Fix bug with the worker reallocating during the response - Update .golangci and fix new warnings Signed-off-by: Valery Piashchynski --- pkg/transport/socket/socket_factory.go | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'pkg/transport/socket/socket_factory.go') diff --git a/pkg/transport/socket/socket_factory.go b/pkg/transport/socket/socket_factory.go index f58f9561..990eb384 100755 --- a/pkg/transport/socket/socket_factory.go +++ b/pkg/transport/socket/socket_factory.go @@ -88,7 +88,7 @@ func (f *Factory) SpawnWorkerWithTimeout(ctx context.Context, cmd *exec.Cmd, lis const op = errors.Op("factory_spawn_worker_with_timeout") c := make(chan socketSpawn) go func() { - ctx, cancel := context.WithTimeout(ctx, f.tout) + ctxT, cancel := context.WithTimeout(ctx, f.tout) defer cancel() w, err := worker.InitBaseWorker(cmd, worker.AddListeners(listeners...)) if err != nil { @@ -108,7 +108,7 @@ func (f *Factory) SpawnWorkerWithTimeout(ctx context.Context, cmd *exec.Cmd, lis return } - rl, err := f.findRelayWithContext(ctx, w) + rl, err := f.findRelayWithContext(ctxT, w) if err != nil { err = multierr.Combine( err, @@ -179,18 +179,19 @@ func (f *Factory) Close() error { // waits for Process to connect over socket and returns associated relay of timeout func (f *Factory) findRelayWithContext(ctx context.Context, w worker.BaseProcess) (*socket.Relay, error) { - ticker := time.NewTicker(time.Millisecond * 100) + ticker := time.NewTicker(time.Millisecond * 10) for { select { case <-ctx.Done(): return nil, ctx.Err() case <-ticker.C: + // check for the process exists _, err := process.NewProcess(int32(w.Pid())) if err != nil { return nil, err } default: - tmp, ok := f.relays.Load(w.Pid()) + tmp, ok := f.relays.LoadAndDelete(w.Pid()) if !ok { continue } @@ -221,8 +222,3 @@ func (f *Factory) findRelay(w worker.BaseProcess) (*socket.Relay, error) { func (f *Factory) attachRelayToPid(pid int64, relay relay.Relay) { f.relays.Store(pid, relay) } - -// deletes relay chan associated with specific pid -func (f *Factory) removeRelayFromPid(pid int64) { - f.relays.Delete(pid) -} -- cgit v1.2.3