func (r *redirector) pgListener() { var conn *pgx.Conn listen := func() (err error) { conn, err = r.DB.Acquire() if err != nil { return } if err = conn.Listen("refresh"); err != nil { return } for { _, err = conn.WaitForNotification(time.Second) if err == pgx.ErrNotificationTimeout { continue } if err != nil { return } r.maybeLoad() } } for { err := listen() log.Println("listen error:", err) if conn != nil { conn.Exec("UNLISTEN refresh") r.DB.Release(conn) conn = nil } time.Sleep(time.Second) } }