move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
package pool
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"go.uber.org/atomic"
|
||||
)
|
||||
|
||||
type reqKey int64
|
||||
|
||||
type reqMap struct {
|
||||
m map[reqKey]chan *poolConn
|
||||
mux sync.Mutex
|
||||
_ [4]byte
|
||||
|
||||
nextRequest atomic.Int64
|
||||
}
|
||||
|
||||
func newReqMap() *reqMap {
|
||||
return &reqMap{
|
||||
m: map[reqKey]chan *poolConn{},
|
||||
}
|
||||
}
|
||||
|
||||
func (r *reqMap) request() (key reqKey, ch chan *poolConn) {
|
||||
key = reqKey(r.nextRequest.Inc())
|
||||
ch = make(chan *poolConn, 1)
|
||||
|
||||
r.mux.Lock()
|
||||
r.m[key] = ch
|
||||
r.mux.Unlock()
|
||||
return key, ch
|
||||
}
|
||||
|
||||
func (r *reqMap) transfer(c *poolConn) bool {
|
||||
r.mux.Lock()
|
||||
if len(r.m) < 1 { // no requests
|
||||
r.mux.Unlock()
|
||||
return false
|
||||
}
|
||||
|
||||
var ch chan *poolConn
|
||||
var k reqKey
|
||||
for k, ch = range r.m { // Get one from map.
|
||||
break
|
||||
}
|
||||
delete(r.m, k) // Remove from pending requests.
|
||||
r.mux.Unlock()
|
||||
|
||||
if ch == nil {
|
||||
panic("unreachable: channel can't be nil due to map not empty")
|
||||
}
|
||||
|
||||
ch <- c
|
||||
close(ch)
|
||||
return true
|
||||
}
|
||||
|
||||
func (r *reqMap) delete(key reqKey) {
|
||||
r.mux.Lock()
|
||||
delete(r.m, key)
|
||||
r.mux.Unlock()
|
||||
}
|
||||
Reference in New Issue
Block a user