From a8bcbfd4160b7f55ace800f632108333b56dc327 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Wed, 6 May 2009 02:33:37 +0000 Subject: [PATCH] Fix bufferevent_async to use lock/unlock, not unlock/unlock. You do NOT want to know what windows does when you unlock a lock that is already unlocked. svn:r1278 --- bufferevent_async.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bufferevent_async.c b/bufferevent_async.c index 88f87576..6d503979 100644 --- a/bufferevent_async.c +++ b/bufferevent_async.c @@ -180,7 +180,7 @@ be_async_inbuf_callback(struct evbuffer *buf, /* If we successfully read into the inbuf, or we drained data from * the inbuf and were not reading before, we may want to read now */ - BEV_UNLOCK(bev); + BEV_LOCK(bev); if (cbinfo->n_added) { /* XXXX can't detect 0-length read completion */ bev_async->read_in_progress = 0; @@ -277,6 +277,8 @@ bufferevent_async_new(struct event_base *base, evbuffer_add_cb(bev->input, be_async_inbuf_callback, bev); evbuffer_add_cb(bev->output, be_async_outbuf_callback, bev); + evbuffer_defer_callbacks(bev->input, base); + evbuffer_defer_callbacks(bev->output, base); return bev; err: