From 215e629cd4244f40769e09df5951c6cbe66ed246 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Mon, 21 Jun 2010 12:26:21 -0400 Subject: [PATCH] Add bufferevent_lock()/bufferevent_unlock() Although bufferevent operations are threadsafe, sometimes you need to make sure that a few operations on a single bufferevent will all be executed with nothing intervening. That's what these functions are for. --- bufferevent.c | 14 ++++++++++++++ include/event2/bufferevent.h | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/bufferevent.c b/bufferevent.c index 75ff9b72..8d3f7cba 100644 --- a/bufferevent.c +++ b/bufferevent.c @@ -825,3 +825,17 @@ _bufferevent_add_event(struct event *ev, const struct timeval *tv) else return event_add(ev, tv); } + +/* For use by user programs only; internally, we should be calling + either _bufferevent_incref_and_lock(), or BEV_LOCK. */ +void +bufferevent_lock(struct bufferevent *bev) +{ + _bufferevent_incref_and_lock(bev); +} + +void +bufferevent_unlock(struct bufferevent *bev) +{ + _bufferevent_decref_and_unlock(bev); +} diff --git a/include/event2/bufferevent.h b/include/event2/bufferevent.h index 02cabe67..55e44f9c 100644 --- a/include/event2/bufferevent.h +++ b/include/event2/bufferevent.h @@ -423,6 +423,18 @@ int bufferevent_set_timeouts(struct bufferevent *bufev, void bufferevent_setwatermark(struct bufferevent *bufev, short events, size_t lowmark, size_t highmark); +/** + Acquire the lock on a bufferevent. Has no effect if locking was not + enabled with BEV_OPT_THREADSAFE. + */ +void bufferevent_lock(struct bufferevent *bufev); + +/** + Release the lock on a bufferevent. Has no effect if locking was not + enabled with BEV_OPT_THREADSAFE. + */ +void bufferevent_unlock(struct bufferevent *bufev); + /** Flags that can be passed into filters to let them know how to deal with the incoming data. -- 2.40.0