File tree Expand file tree Collapse file tree 3 files changed +27
-0
lines changed
src/Symfony/Component/Semaphore Expand file tree Collapse file tree 3 files changed +27
-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,24 @@ public function testExpiration()
252252 $ semaphore = new Semaphore ($ key , $ store );
253253 $ this ->assertTrue ($ semaphore ->isExpired ());
254254 }
255+
256+ /**
257+ * @group time-sensitive
258+ */
259+ public function testExpirationResetAfter ()
260+ {
261+ $ store = $ this ->getMockBuilder (PersistingStoreInterface::class)->getMock ();
262+
263+ $ key = new Key ('key ' , 1 );
264+ $ semaphore = new Semaphore ($ key , $ store , 1 );
265+
266+ $ semaphore ->acquire ();
267+ $ this ->assertFalse ($ semaphore ->isExpired ());
268+ $ semaphore ->release ();
269+
270+ sleep (2 );
271+
272+ $ semaphore ->acquire ();
273+ $ this ->assertFalse ($ semaphore ->isExpired ());
274+ }
255275}
You can’t perform that action at this time.
0 commit comments