mirror of
https://github.com/safing/portbase
synced 2025-04-10 20:49:09 +00:00
35 lines
758 B
Go
35 lines
758 B
Go
package database
|
|
|
|
import (
|
|
"github.com/safing/portbase/database/query"
|
|
"github.com/safing/portbase/database/record"
|
|
)
|
|
|
|
// Subscription is a database subscription for updates.
|
|
type Subscription struct {
|
|
q *query.Query
|
|
local bool
|
|
internal bool
|
|
|
|
Feed chan record.Record
|
|
}
|
|
|
|
// Cancel cancels the subscription.
|
|
func (s *Subscription) Cancel() error {
|
|
c, err := getController(s.q.DatabaseName())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
c.subscriptionLock.Lock()
|
|
defer c.subscriptionLock.Unlock()
|
|
|
|
for key, sub := range c.subscriptions {
|
|
if sub.q == s.q {
|
|
c.subscriptions = append(c.subscriptions[:key], c.subscriptions[key+1:]...)
|
|
close(s.Feed) // this close is guarded by the controllers subscriptionLock.
|
|
return nil
|
|
}
|
|
}
|
|
return nil
|
|
}
|