MCPcopy Create free account
hub / github.com/Shopify/goose / WaitOrLock

Method WaitOrLock

lockmap/map.go:64–88  ·  view source on GitHub ↗
(key interface{}, ttl time.Duration)

Source from the content-addressed store, hash-verified

62}
63
64func (m *lockMap) WaitOrLock(key interface{}, ttl time.Duration) (promise Promise, gotLock bool) {
65 p := make(chan struct{})
66
67 now := time.Now()
68 expiration := now.Add(ttl).UnixNano()
69
70 m.l.Lock()
71 defer m.l.Unlock()
72
73 if prev, ok := m.promises[key]; ok {
74 if prev.expiration > now.UnixNano() {
75 return prev.promise, false
76 }
77
78 // Current entry is expired
79 prev.resolve()
80 }
81
82 m.promises[key] = &entry{
83 expiration: expiration,
84 promise: p,
85 }
86
87 return p, true
88}
89
90func (m *lockMap) Release(key interface{}) {
91 m.l.Lock()

Callers

nothing calls this directly

Calls 1

resolveMethod · 0.80

Tested by

no test coverage detected