mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-06 01:15:29 +08:00
44 lines
791 B
Go
44 lines
791 B
Go
package account
|
|
|
|
func (p *Pool) canQueueLocked(target string, exclude map[string]bool) bool {
|
|
if target != "" {
|
|
if exclude[target] {
|
|
return false
|
|
}
|
|
if _, ok := p.store.FindAccount(target); !ok {
|
|
return false
|
|
}
|
|
}
|
|
if p.maxQueueSize <= 0 {
|
|
return false
|
|
}
|
|
return len(p.waiters) < p.maxQueueSize
|
|
}
|
|
|
|
func (p *Pool) notifyWaiterLocked() {
|
|
if len(p.waiters) == 0 {
|
|
return
|
|
}
|
|
waiter := p.waiters[0]
|
|
p.waiters = p.waiters[1:]
|
|
close(waiter)
|
|
}
|
|
|
|
func (p *Pool) removeWaiterLocked(waiter chan struct{}) bool {
|
|
for i, w := range p.waiters {
|
|
if w != waiter {
|
|
continue
|
|
}
|
|
p.waiters = append(p.waiters[:i], p.waiters[i+1:]...)
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (p *Pool) drainWaitersLocked() {
|
|
for _, waiter := range p.waiters {
|
|
close(waiter)
|
|
}
|
|
p.waiters = nil
|
|
}
|