2
0

Unlisten tweaks

- Use unlisten * when releasing connection with listeners to pool
- Only unlisten on releasing connection to pool when necessary
- Remove Unlisten("") as was to release all listeners
This commit is contained in:
Jack Christensen
2015-09-21 08:18:10 -05:00
parent 9fd5c7e6ab
commit ca16a4c98f
2 changed files with 19 additions and 26 deletions
+12 -25
View File
@@ -602,39 +602,26 @@ func (c *Conn) Deallocate(name string) (err error) {
}
// Listen establishes a PostgreSQL listen/notify to channel
func (c *Conn) Listen(channel string) (err error) {
_, err = c.Exec("listen " + channel)
func (c *Conn) Listen(channel string) error {
_, err := c.Exec("listen " + channel)
if err != nil {
return
return err
}
var s struct{}
c.channels[channel] = s
return
c.channels[channel] = struct{}{}
return nil
}
// Unlisten unsubscribes from a listen channel
// If channel is empty then unsubscribe from all channels
func (c *Conn) Unlisten(channel string) (err error) {
if channel != "" {
err = c.unlisten(channel)
} else {
for s, _ := range c.channels {
err = c.unlisten(s)
if err != nil {
return
}
}
}
return
}
func (c *Conn) unlisten(channel string) (err error) {
_, err = c.Exec("unlisten " + channel)
func (c *Conn) Unlisten(channel string) error {
_, err := c.Exec("unlisten " + channel)
if err != nil {
return
return err
}
delete(c.channels, channel)
return
return nil
}
// WaitForNotification waits for a PostgreSQL notification for up to timeout.