@@ -173,15 +173,18 @@ protected function addTimerInternal($interval, $callback, $periodic = false)
173173 'callback ' => $ callback ,
174174 'interval ' => $ interval * 1000000 ,
175175 'periodic ' => $ periodic ,
176+ 'cancelled ' => false ,
176177 );
177178
178179 $ timer ->signature = spl_object_hash ($ timer );
179180
180181 $ callback = function () use ($ timer ) {
181- call_user_func ($ timer ->callback , $ timer ->signature , $ timer ->loop );
182+ if ($ timer ->cancelled === false ) {
183+ call_user_func ($ timer ->callback , $ timer ->signature , $ timer ->loop );
182184
183- if ($ timer ->periodic === true ) {
184- event_add ($ timer ->resource , $ timer ->interval );
185+ if ($ timer ->periodic === true ) {
186+ event_add ($ timer ->resource , $ timer ->interval );
187+ }
185188 }
186189 };
187190
@@ -207,8 +210,11 @@ public function addPeriodicTimer($interval, $callback)
207210 public function cancelTimer ($ signature )
208211 {
209212 if (isset ($ this ->timers [$ signature ])) {
210- event_del ($ resource = $ this ->timers [$ signature ]->resource );
211- $ this ->timersGc [$ signature ] = $ resource ;
213+ $ timer = $ this ->timers [$ signature ];
214+
215+ $ timer ->cancelled = true ;
216+ event_del ($ timer ->resource );
217+ $ this ->timersGc [$ signature ] = $ timer ->resource ;
212218 unset($ this ->timers [$ signature ]);
213219 }
214220 }
0 commit comments