@@ -151,18 +151,18 @@ func keyname(prefix, name string, i int32) string {
151
151
return sb .String ()
152
152
}
153
153
154
- func (m * locker ) acquire (ctx context.Context , key , val string , deadline time.Time , force bool ) (err error ) {
154
+ func (m * locker ) acquire (ctx context.Context , key , val string , duration time. Duration , deadline time.Time , force bool ) (err error ) {
155
155
ctx , cancel := context .WithTimeout (ctx , m .timeout )
156
156
var resp rueidis.RedisResult
157
157
if force {
158
158
if m .setpx {
159
- resp = fcqms .Exec (ctx , m .client , []string {key }, []string {val , strconv .FormatInt (m . validity .Milliseconds (), 10 )})
159
+ resp = fcqms .Exec (ctx , m .client , []string {key }, []string {val , strconv .FormatInt (duration .Milliseconds (), 10 )})
160
160
} else {
161
161
resp = fcqat .Exec (ctx , m .client , []string {key }, []string {val , strconv .FormatInt (deadline .UnixMilli (), 10 )})
162
162
}
163
163
} else {
164
164
if m .setpx {
165
- resp = acqms .Exec (ctx , m .client , []string {key }, []string {val , strconv .FormatInt (m . validity .Milliseconds (), 10 )})
165
+ resp = acqms .Exec (ctx , m .client , []string {key }, []string {val , strconv .FormatInt (duration .Milliseconds (), 10 )})
166
166
} else {
167
167
resp = acqat .Exec (ctx , m .client , []string {key }, []string {val , strconv .FormatInt (deadline .UnixMilli (), 10 )})
168
168
}
@@ -249,8 +249,15 @@ func (m *locker) try(ctx context.Context, cancel context.CancelFunc, name string
249
249
var err error
250
250
251
251
val := random ()
252
- deadline := time .Now ().Add (m .validity )
253
- cacneltm := time .AfterFunc (m .validity , cancel )
252
+ now := time .Now ()
253
+ duration := m .validity
254
+ if dl , ok := ctx .Deadline (); ok {
255
+ if dur := dl .Sub (now ); dur < duration {
256
+ duration = dur
257
+ }
258
+ }
259
+ deadline := now .Add (duration )
260
+ cacneltm := time .AfterFunc (duration , cancel )
254
261
released := int32 (0 )
255
262
acquired := int32 (0 )
256
263
failures := int32 (0 )
@@ -314,7 +321,7 @@ func (m *locker) try(ctx context.Context, cancel context.CancelFunc, name string
314
321
default :
315
322
}
316
323
if ! errors .Is (err , ErrNotLocked ) {
317
- if err = m .acquire (ctx , key , val , deadline , force ); force && err == nil {
324
+ if err = m .acquire (ctx , key , val , duration , deadline , force ); force && err == nil {
318
325
m .mu .RLock ()
319
326
if m .gates != nil {
320
327
select {
0 commit comments