@@ -173,15 +173,18 @@ protected function addTimerInternal($interval, $callback, $periodic = false)
173
173
'callback ' => $ callback ,
174
174
'interval ' => $ interval * 1000000 ,
175
175
'periodic ' => $ periodic ,
176
+ 'cancelled ' => false ,
176
177
);
177
178
178
179
$ timer ->signature = spl_object_hash ($ timer );
179
180
180
181
$ 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 );
182
184
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
+ }
185
188
}
186
189
};
187
190
@@ -207,8 +210,11 @@ public function addPeriodicTimer($interval, $callback)
207
210
public function cancelTimer ($ signature )
208
211
{
209
212
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 ;
212
218
unset($ this ->timers [$ signature ]);
213
219
}
214
220
}
0 commit comments