keys := []cacheKey{"gid", gid}
ch := make(chan *Group, 1)
+ if gid < 1 {
+ ch <- nil
+ close(ch)
+ return ch
+ }
+
ic := make(chan Cacheable, 1)
go func() { ch <- (<-ic).(*Group); close(ch) }()
if intentMap.Intent(ic, keys...) {
}
if !cache.CheckValid(keys...) {
- intentMap.Notify((*Group)(nil), keys...)
+ intentMap.NotifyClose((*Group)(nil), keys...)
return ch
}
g := gid.Group()
if !g.IsStale() {
- intentMap.Notify(g, keys...)
+ intentMap.NotifyClose(g, keys...)
return ch
}
cache.Delete(keys...) // deleted group?
}
- intentMap.Notify(g, keys...)
+ intentMap.NotifyClose(g, keys...)
}()
return ch
}
altKeys := []cacheKey{"gid", "by-shortname", gname}
ch := make(chan *Group, 1)
+ if gname == "" {
+ ch <- nil
+ close(ch)
+ return ch
+ }
+
ic := make(chan Cacheable, 1)
go func() {
gid := (<-ic).(GID)
}
if !cache.CheckValid(keys...) {
- intentMap.Notify(GID(0), keys...)
+ intentMap.NotifyClose(GID(0), keys...)
return ch
}
var gc gidCache
if cache.Get(&gc, keys...) == nil && !gc.IsStale() {
- intentMap.Notify(gc.GID, keys...)
+ intentMap.NotifyClose(gc.GID, keys...)
return ch
}
gid = gc.GID
if gid == 0 {
if cache.Get(&gc, altKeys...) == nil && !gc.IsStale() {
- intentMap.Notify(gc.GID, keys...)
+ intentMap.NotifyClose(gc.GID, keys...)
return ch
}
gid = gc.GID
cache.Delete(altKeys...)
}
- intentMap.Notify(gid, keys...)
+ intentMap.NotifyClose(gid, keys...)
}()
return ch
}