File tree 3 files changed +24
-0
lines changed
src/Symfony/Component/Semaphore
3 files changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -81,6 +81,11 @@ public function getState(string $stateKey)
81
81
}
82
82
83
83
public function reduceLifetime(float $ ttlInSeconds )
84
+ public function resetLifetime (): void
85
+ {
86
+ $ this ->expiringTime = null ;
87
+ }
88
+
84
89
{
85
90
$ newTime = microtime (true ) + $ ttlInSeconds ;
86
91
Original file line number Diff line number Diff line change @@ -66,6 +66,7 @@ public function __destruct()
66
66
public function acquire (): bool
67
67
{
68
68
try {
69
+ $ this ->key ->resetLifetime ();
69
70
$ this ->store ->save ($ this ->key , $ this ->ttlInSecond );
70
71
$ this ->key ->reduceLifetime ($ this ->ttlInSecond );
71
72
$ this ->dirty = true ;
@@ -97,6 +98,7 @@ public function refresh(?float $ttlInSecond = null)
97
98
}
98
99
99
100
try {
101
+ $ this ->key ->resetLifetime ();
100
102
$ this ->store ->putOffExpiration ($ this ->key , $ ttlInSecond );
101
103
$ this ->key ->reduceLifetime ($ ttlInSecond );
102
104
Original file line number Diff line number Diff line change @@ -252,4 +252,21 @@ public function testExpiration()
252
252
$ semaphore = new Semaphore ($ key , $ store );
253
253
$ this ->assertTrue ($ semaphore ->isExpired ());
254
254
}
255
+
256
+ public function testExpirationResetAfter ()
257
+ {
258
+ $ store = $ this ->getMockBuilder (PersistingStoreInterface::class)->getMock ();
259
+
260
+ $ key = new Key ('key ' , 1 );
261
+ $ semaphore = new Semaphore ($ key , $ store , 0.1 );
262
+
263
+ $ semaphore ->acquire ();
264
+ $ this ->assertFalse ($ semaphore ->isExpired ());
265
+ $ semaphore ->release ();
266
+
267
+ \usleep (100001 );
268
+
269
+ $ semaphore ->acquire ();
270
+ $ this ->assertFalse ($ semaphore ->isExpired ());
271
+ }
255
272
}
You can’t perform that action at this time.
0 commit comments