/** * If the event is associated with any EventLoop (add()ed or feed_event()ed), it * will be stopped and reset. * * @return boolean */ PHP_METHOD(Event, stop) { event_object *obj = (event_object *)zend_object_store_get_object(getThis() TSRMLS_CC); EVENT_STOP(obj); EVENT_LOOP_REF_DEL(obj); }
/** * Removes the event from the event loop, will skip all pending events on it too. * * @param Event * @return boolean False if the Event is not associated with this EventLoop, * can also be false if there is an error */ PHP_METHOD(EventLoop, remove) { zval *event_obj; event_object *event; event_loop_object *loop_obj = (event_loop_object *)zend_object_store_get_object(getThis() TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &event_obj, event_ce) != SUCCESS) { return; } event = (event_object *)zend_object_store_get_object(event_obj TSRMLS_CC); assert(loop_obj->loop); if(loop_obj->loop && event_is_active(event)) { assert(event->loop_obj); /* Check that the event is associated with us */ if( ! event_in_loop(loop_obj, event)) { IF_DEBUG(libev_printf("Event is not in this EventLoop\n")); RETURN_BOOL(0); } EVENT_STOP(event); /* Remove GC protection, no longer active or pending */ EVENT_LOOP_REF_DEL(event); RETURN_BOOL(1); } RETURN_BOOL(0); }