Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitcec2de3

Browse files
committed
fix: Race when writing to a closed pipe
This is such an intermittent race it's difficult to track,but regardless this is an improvement to the code.
1 parent9b19dc9 commitcec2de3

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

‎provisionersdk/serve.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ func Serve(ctx context.Context, server proto.DRPCProvisionerServer, options *Ser
3131
ifoptions.Listener==nil {
3232
config:=yamux.DefaultConfig()
3333
config.LogOutput=io.Discard
34-
stdio,err:=yamux.Server(readWriteCloser{
35-
ReadCloser:os.Stdin,
36-
Writer:os.Stdout,
34+
stdio,err:=yamux.Server(&readWriteCloser{
35+
ReadCloser:os.Stdin,
36+
WriteCloser:os.Stdout,
3737
},config)
3838
iferr!=nil {
3939
returnxerrors.Errorf("create yamux: %w",err)
@@ -54,6 +54,9 @@ func Serve(ctx context.Context, server proto.DRPCProvisionerServer, options *Ser
5454
// short-lived processes that can be executed concurrently.
5555
err=srv.Serve(ctx,options.Listener)
5656
iferr!=nil {
57+
iferrors.Is(err,io.EOF) {
58+
returnnil
59+
}
5760
iferrors.Is(err,context.Canceled) {
5861
returnnil
5962
}

‎provisionersdk/transport.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@ func TransportPipe() (*yamux.Session, *yamux.Session) {
2222
yamuxConfig:=yamux.DefaultConfig()
2323
yamuxConfig.LogOutput=io.Discard
2424
client,err:=yamux.Client(&readWriteCloser{
25-
ReadCloser:clientReader,
26-
Writer:serverWriter,
25+
ReadCloser:clientReader,
26+
WriteCloser:serverWriter,
2727
},yamuxConfig)
2828
iferr!=nil {
2929
panic(err)
3030
}
3131

3232
server,err:=yamux.Server(&readWriteCloser{
33-
ReadCloser:serverReader,
34-
Writer:clientWriter,
33+
ReadCloser:serverReader,
34+
WriteCloser:clientWriter,
3535
},yamuxConfig)
3636
iferr!=nil {
3737
panic(err)
@@ -46,7 +46,15 @@ func Conn(session *yamux.Session) drpc.Conn {
4646

4747
typereadWriteCloserstruct {
4848
io.ReadCloser
49-
io.Writer
49+
io.WriteCloser
50+
}
51+
52+
func (c*readWriteCloser)Close()error {
53+
err:=c.ReadCloser.Close()
54+
iferr!=nil {
55+
returnerr
56+
}
57+
returnc.WriteCloser.Close()
5058
}
5159

5260
// Allows concurrent requests on a single dRPC connection.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp