From 38cef641c4c8ca03ae7bd90b44181262657f92ff Mon Sep 17 00:00:00 2001 From: Greg Hazel Date: Tue, 24 Mar 2015 17:29:40 -0700 Subject: [PATCH] fix the return value of event_deferred_cb_schedule_ --- defer-internal.h | 2 +- event-internal.h | 2 +- event.c | 11 +++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/defer-internal.h b/defer-internal.h index d8cf32f4..e3c7d7da 100644 --- a/defer-internal.h +++ b/defer-internal.h @@ -58,7 +58,7 @@ void event_deferred_cb_cancel_(struct event_base *, struct event_callback *); /** Activate a struct event_callback if it is not currently scheduled in an event_base. - Return true iff it was not previously scheduled. + Return true if it was not previously scheduled. */ int event_deferred_cb_schedule_(struct event_base *, struct event_callback *); diff --git a/event-internal.h b/event-internal.h index 5208fbe0..3bc79c72 100644 --- a/event-internal.h +++ b/event-internal.h @@ -435,7 +435,7 @@ int event_callback_finalize_many_(struct event_base *base, int n_cbs, struct eve void event_active_later_(struct event *ev, int res); void event_active_later_nolock_(struct event *ev, int res); -void event_callback_activate_later_nolock_(struct event_base *base, +int event_callback_activate_later_nolock_(struct event_base *base, struct event_callback *evcb); int event_callback_cancel_nolock_(struct event_base *base, struct event_callback *evcb, int even_if_finalizing); diff --git a/event.c b/event.c index af4a6e05..1a2d0dad 100644 --- a/event.c +++ b/event.c @@ -2931,16 +2931,17 @@ event_callback_activate_nolock_(struct event_base *base, return r; } -void +int event_callback_activate_later_nolock_(struct event_base *base, struct event_callback *evcb) { if (evcb->evcb_flags & (EVLIST_ACTIVE|EVLIST_ACTIVE_LATER)) - return; + return 0; event_queue_insert_active_later(base, evcb); if (EVBASE_NEED_NOTIFY(base)) evthread_notify_base(base); + return 1; } void @@ -3025,10 +3026,12 @@ event_deferred_cb_schedule_(struct event_base *base, struct event_callback *cb) base = current_base; EVBASE_ACQUIRE_LOCK(base, th_base_lock); if (base->n_deferreds_queued > MAX_DEFERREDS_QUEUED) { - event_callback_activate_later_nolock_(base, cb); + r = event_callback_activate_later_nolock_(base, cb); } else { - ++base->n_deferreds_queued; r = event_callback_activate_nolock_(base, cb); + if (r) { + ++base->n_deferreds_queued; + } } EVBASE_RELEASE_LOCK(base, th_base_lock); return r;