From bfaea9e7ec1ce0741c7bf5e6a014bf2100b758f5 Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Tue, 24 May 2022 08:26:37 -0500 Subject: [PATCH] Fix rare race in CopyFrom --- pgconn/pgconn.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pgconn/pgconn.go b/pgconn/pgconn.go index af8aeb57..c8b41f84 100644 --- a/pgconn/pgconn.go +++ b/pgconn/pgconn.go @@ -1184,8 +1184,11 @@ func (pgConn *PgConn) CopyFrom(ctx context.Context, r io.Reader, sql string) (Co abortCopyChan := make(chan struct{}) copyErrChan := make(chan error, 1) signalMessageChan := pgConn.signalMessage() + senderDoneChan := make(chan struct{}) go func() { + defer close(senderDoneChan) + buf := make([]byte, 0, 65536) buf = append(buf, 'd') sp := len(buf) @@ -1239,6 +1242,7 @@ func (pgConn *PgConn) CopyFrom(ctx context.Context, r io.Reader, sql string) (Co } } close(abortCopyChan) + <-senderDoneChan if copyErr == io.EOF || pgErr != nil { pgConn.frontend.Send(&pgproto3.CopyDone{})