aboutsummaryrefslogtreecommitdiffstats
path: root/vm/vmimpl/vmimpl.go
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2026-02-07 19:07:44 +0100
committerAleksandr Nogikh <nogikh@google.com>2026-02-17 14:55:28 +0000
commit9ca304f096ce425e3556bbd05745f896f5e0b268 (patch)
treef17ce5341faa2f56bc7a6a1f1b34aad6e7442525 /vm/vmimpl/vmimpl.go
parentf4288eed9c51fed44b853c252711c00de8761336 (diff)
vm/vmimpl: refactor Merger error processing
Introduce an Error() method to avoid capturing the errors of already overridden decoders.
Diffstat (limited to 'vm/vmimpl/vmimpl.go')
-rw-r--r--vm/vmimpl/vmimpl.go4
1 files changed, 3 insertions, 1 deletions
diff --git a/vm/vmimpl/vmimpl.go b/vm/vmimpl/vmimpl.go
index f54e4e2b5..b1745d192 100644
--- a/vm/vmimpl/vmimpl.go
+++ b/vm/vmimpl/vmimpl.go
@@ -190,6 +190,8 @@ func Multiplex(ctx context.Context, cmd *exec.Cmd, merger *OutputMerger, config
}
}
go func() {
+ errCtx, cancel := context.WithCancel(context.Background())
+ defer cancel()
select {
case <-ctx.Done():
signal(ErrTimeout)
@@ -198,7 +200,7 @@ func Multiplex(ctx context.Context, cmd *exec.Cmd, merger *OutputMerger, config
log.Logf(0, "instance closed")
}
signal(fmt.Errorf("instance closed"))
- case err := <-merger.Err:
+ case err := <-merger.Errors(errCtx):
// EOF is not always in perfect sync with exit, so we should wait a bit.
if cmdErr := waitAndKill(ctx, cmd); cmdErr == nil {
// If the command exited successfully, we got EOF error from merger.