summaryrefslogtreecommitdiff
path: root/buffer.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2012-04-06 04:33:19 -0400
committerNick Mathewson <nickm@torproject.org>2012-05-09 12:05:53 -0400
commitae2b84b2575be93d0aebba5c0b78453836f89f3c (patch)
treed72145bcb64a0556560e07181828821ebc180a3e /buffer.c
parentfec8bae2673966325eeaabc3fc1af60b584abb1a (diff)
downloadlibevent-ae2b84b2575be93d0aebba5c0b78453836f89f3c.tar.gz
Replace deferred_cbs with event_callback-based implementation.
Diffstat (limited to 'buffer.c')
-rw-r--r--buffer.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/buffer.c b/buffer.c
index b28c9361..6853edf3 100644
--- a/buffer.c
+++ b/buffer.c
@@ -404,7 +404,7 @@ evbuffer_defer_callbacks(struct evbuffer *buffer, struct event_base *base)
EVBUFFER_LOCK(buffer);
buffer->cb_queue = event_base_get_deferred_cb_queue_(base);
buffer->deferred_cbs = 1;
- event_deferred_cb_init_(&buffer->deferred,
+ event_deferred_cb_init_(base, &buffer->deferred,
evbuffer_deferred_callback, buffer);
EVBUFFER_UNLOCK(buffer);
return 0;
@@ -509,13 +509,12 @@ evbuffer_invoke_callbacks_(struct evbuffer *buffer)
}
if (buffer->deferred_cbs) {
- if (buffer->deferred.queued)
- return;
- evbuffer_incref_and_lock_(buffer);
- if (buffer->parent)
- bufferevent_incref_(buffer->parent);
+ if (event_deferred_cb_schedule_(buffer->cb_queue, &buffer->deferred)) {
+ evbuffer_incref_and_lock_(buffer);
+ if (buffer->parent)
+ bufferevent_incref_(buffer->parent);
+ }
EVBUFFER_UNLOCK(buffer);
- event_deferred_cb_schedule_(buffer->cb_queue, &buffer->deferred);
}
evbuffer_run_callbacks(buffer, 0);