v2: Cancel shim log ctx when ttrpc is closed
The background context aovids shim blocking when the ctx is cancelled unexpectedly during shim start. But if the shim exits unexpectedly before opening the pipe, the fd will never be closed. `onCloseWithShimLog` makes sure that the shim log fd is closed properly once the shim disconnects. Signed-off-by: Li Yuxuan <liyuxuan04@baidu.com>
This commit is contained in:
parent
986d06785c
commit
84464b801f
@ -77,7 +77,13 @@ func (b *binary) Start(ctx context.Context, opts *types.Any, onClose func()) (_
|
|||||||
}
|
}
|
||||||
// Windows needs a namespace when openShimLog
|
// Windows needs a namespace when openShimLog
|
||||||
ns, _ := namespaces.Namespace(ctx)
|
ns, _ := namespaces.Namespace(ctx)
|
||||||
f, err := openShimLog(namespaces.WithNamespace(context.Background(), ns), b.bundle, client.AnonDialer)
|
shimCtx, cancelShimLog := context.WithCancel(namespaces.WithNamespace(context.Background(), ns))
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
cancelShimLog()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
f, err := openShimLog(shimCtx, b.bundle, client.AnonDialer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "open shim log pipe")
|
return nil, errors.Wrap(err, "open shim log pipe")
|
||||||
}
|
}
|
||||||
@ -106,7 +112,11 @@ func (b *binary) Start(ctx context.Context, opts *types.Any, onClose func()) (_
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
client := ttrpc.NewClient(conn, ttrpc.WithOnClose(onClose))
|
onCloseWithShimLog := func() {
|
||||||
|
onClose()
|
||||||
|
cancelShimLog()
|
||||||
|
}
|
||||||
|
client := ttrpc.NewClient(conn, ttrpc.WithOnClose(onCloseWithShimLog))
|
||||||
return &shim{
|
return &shim{
|
||||||
bundle: b.bundle,
|
bundle: b.bundle,
|
||||||
client: client,
|
client: client,
|
||||||
|
Loading…
Reference in New Issue
Block a user