diff options
author | Nick Mathewson <nickm@torproject.org> | 2012-04-06 04:33:19 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2012-05-09 12:05:53 -0400 |
commit | ae2b84b2575be93d0aebba5c0b78453836f89f3c (patch) | |
tree | d72145bcb64a0556560e07181828821ebc180a3e /bufferevent.c | |
parent | fec8bae2673966325eeaabc3fc1af60b584abb1a (diff) | |
download | libevent-ae2b84b2575be93d0aebba5c0b78453836f89f3c.tar.gz |
Replace deferred_cbs with event_callback-based implementation.
Diffstat (limited to 'bufferevent.c')
-rw-r--r-- | bufferevent.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/bufferevent.c b/bufferevent.c index 0d4b01d6..9c023ad4 100644 --- a/bufferevent.c +++ b/bufferevent.c @@ -210,10 +210,10 @@ bufferevent_run_deferred_callbacks_unlocked(struct deferred_cb *cb, void *arg) #define SCHEDULE_DEFERRED(bevp) \ do { \ - bufferevent_incref_(&(bevp)->bev); \ - event_deferred_cb_schedule_( \ + if (event_deferred_cb_schedule_( \ event_base_get_deferred_cb_queue_((bevp)->bev.ev_base), \ - &(bevp)->deferred); \ + &(bevp)->deferred)) \ + bufferevent_incref_(&(bevp)->bev); \ } while (0) @@ -227,8 +227,7 @@ bufferevent_run_readcb_(struct bufferevent *bufev) return; if (p->options & BEV_OPT_DEFER_CALLBACKS) { p->readcb_pending = 1; - if (!p->deferred.queued) - SCHEDULE_DEFERRED(p); + SCHEDULE_DEFERRED(p); } else { bufev->readcb(bufev, bufev->cbarg); } @@ -244,8 +243,7 @@ bufferevent_run_writecb_(struct bufferevent *bufev) return; if (p->options & BEV_OPT_DEFER_CALLBACKS) { p->writecb_pending = 1; - if (!p->deferred.queued) - SCHEDULE_DEFERRED(p); + SCHEDULE_DEFERRED(p); } else { bufev->writecb(bufev, bufev->cbarg); } @@ -262,8 +260,7 @@ bufferevent_run_eventcb_(struct bufferevent *bufev, short what) if (p->options & BEV_OPT_DEFER_CALLBACKS) { p->eventcb_pending |= what; p->errno_pending = EVUTIL_SOCKET_ERROR(); - if (!p->deferred.queued) - SCHEDULE_DEFERRED(p); + SCHEDULE_DEFERRED(p); } else { bufev->errorcb(bufev, what, bufev->cbarg); } @@ -326,11 +323,15 @@ bufferevent_init_common_(struct bufferevent_private *bufev_private, } if (options & BEV_OPT_DEFER_CALLBACKS) { if (options & BEV_OPT_UNLOCK_CALLBACKS) - event_deferred_cb_init_(&bufev_private->deferred, + event_deferred_cb_init_( + bufev->ev_base, + &bufev_private->deferred, bufferevent_run_deferred_callbacks_unlocked, bufev_private); else - event_deferred_cb_init_(&bufev_private->deferred, + event_deferred_cb_init_( + bufev->ev_base, + &bufev_private->deferred, bufferevent_run_deferred_callbacks_locked, bufev_private); } |