File tree Expand file tree Collapse file tree 3 files changed +24
-0
lines changed
src/Symfony/Component/Semaphore Expand file tree Collapse file tree 3 files changed +24
-0
lines changed Original file line number Diff line number Diff line change @@ -80,6 +80,11 @@ public function getState(string $stateKey)
8080 return $ this ->state [$ stateKey ];
8181 }
8282
83+ public function resetLifetime (): void
84+ {
85+ $ this ->expiringTime = null ;
86+ }
87+
8388 public function reduceLifetime (float $ ttlInSeconds )
8489 {
8590 $ newTime = microtime (true ) + $ ttlInSeconds ;
Original file line number Diff line number Diff line change @@ -66,6 +66,7 @@ public function __destruct()
6666 public function acquire (): bool
6767 {
6868 try {
69+ $ this ->key ->resetLifetime ();
6970 $ this ->store ->save ($ this ->key , $ this ->ttlInSecond );
7071 $ this ->key ->reduceLifetime ($ this ->ttlInSecond );
7172 $ this ->dirty = true ;
@@ -97,6 +98,7 @@ public function refresh(?float $ttlInSecond = null)
9798 }
9899
99100 try {
101+ $ this ->key ->resetLifetime ();
100102 $ this ->store ->putOffExpiration ($ this ->key , $ ttlInSecond );
101103 $ this ->key ->reduceLifetime ($ ttlInSecond );
102104
Original file line number Diff line number Diff line change @@ -252,4 +252,21 @@ public function testExpiration()
252252 $ semaphore = new Semaphore ($ key , $ store );
253253 $ this ->assertTrue ($ semaphore ->isExpired ());
254254 }
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+ }
255272}
You can’t perform that action at this time.
0 commit comments