From e14fc757c6b4119026f7ef7ab46a915e5690c4fe Mon Sep 17 00:00:00 2001
From: Garet Halliday <me@garet.holiday>
Date: Thu, 7 Sep 2023 19:05:23 -0500
Subject: [PATCH] i <3 race detector

---
 lib/gat/pool/conn.go                     | 2 +-
 lib/gat/pool/pools/session/pooler.go     | 8 +++-----
 lib/gat/pool/pools/transaction/pooler.go | 4 ----
 pgbouncer.ini                            | 1 +
 4 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/lib/gat/pool/conn.go b/lib/gat/pool/conn.go
index 9498b1b8..60ac051b 100644
--- a/lib/gat/pool/conn.go
+++ b/lib/gat/pool/conn.go
@@ -92,7 +92,7 @@ func (T *Conn) SetState(state metrics.ConnState, peer uuid.UUID) {
 
 func (T *Conn) GetState() (state metrics.ConnState, peer uuid.UUID, since time.Time) {
 	T.mu.RLock()
-	defer T.mu.Unlock()
+	defer T.mu.RUnlock()
 	state = T.state
 	peer = T.peer
 	since = T.since
diff --git a/lib/gat/pool/pools/session/pooler.go b/lib/gat/pool/pools/session/pooler.go
index 22539867..26b28b9d 100644
--- a/lib/gat/pool/pools/session/pooler.go
+++ b/lib/gat/pool/pools/session/pooler.go
@@ -94,12 +94,10 @@ func (T *Pooler) Acquire(_ uuid.UUID, mode pool.SyncMode) uuid.UUID {
 	}
 }
 
-func (*Pooler) ReleaseAfterTransaction() bool {
-	// servers are released when the client is removed
-	return false
-}
-
 func (T *Pooler) Release(server uuid.UUID) {
+	T.mu.Lock()
+	defer T.mu.Unlock()
+
 	// check if server was removed
 	if _, ok := T.servers[server]; !ok {
 		return
diff --git a/lib/gat/pool/pools/transaction/pooler.go b/lib/gat/pool/pools/transaction/pooler.go
index 2f09e64a..25fec284 100644
--- a/lib/gat/pool/pools/transaction/pooler.go
+++ b/lib/gat/pool/pools/transaction/pooler.go
@@ -39,10 +39,6 @@ func (T *Pooler) Acquire(client uuid.UUID, sync pool.SyncMode) uuid.UUID {
 	}
 }
 
-func (*Pooler) ReleaseAfterTransaction() bool {
-	return true
-}
-
 func (T *Pooler) Release(server uuid.UUID) {
 	T.s.Release(server)
 }
diff --git a/pgbouncer.ini b/pgbouncer.ini
index d458e49a..428dbd8b 100644
--- a/pgbouncer.ini
+++ b/pgbouncer.ini
@@ -4,6 +4,7 @@ auth_file = userlist.txt
 listen_addr = *
 track_extra_parameters = IntervalStyle, session_authorization, default_transaction_read_only, search_path
 auth_user = postgres
+server_idle_timeout = 10
 
 [databases]
 * = host=/tmp/ datestyle=Postgres,MDY timezone=PST8PDT
-- 
GitLab