From 0df97353b8acf7c2751f7812f27d99a6974e596c Mon Sep 17 00:00:00 2001 From: Jack Christensen Date: Sun, 12 Jan 2020 16:27:46 -0600 Subject: [PATCH] Fix racy usage of pgConn.contextWatcher in ayncClose --- pgconn.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pgconn.go b/pgconn.go index dce4bfb5..3a6c598a 100644 --- a/pgconn.go +++ b/pgconn.go @@ -518,13 +518,14 @@ func (pgConn *PgConn) ayncClose() { go func() { defer pgConn.conn.Close() - ctx, cancel := context.WithTimeout(context.Background(), time.Second*15) + deadline := time.Now().Add(time.Second * 15) + + ctx, cancel := context.WithDeadline(context.Background(), deadline) defer cancel() pgConn.CancelRequest(ctx) - pgConn.contextWatcher.Watch(ctx) - defer pgConn.contextWatcher.Unwatch() + pgConn.conn.SetDeadline(deadline) pgConn.conn.Write([]byte{'X', 0, 0, 0, 4}) pgConn.conn.Read(make([]byte, 1))