]> granicus.if.org Git - libevent/commitdiff
Add bufferevent_lock()/bufferevent_unlock()
authorNick Mathewson <nickm@torproject.org>
Mon, 21 Jun 2010 16:26:21 +0000 (12:26 -0400)
committerNick Mathewson <nickm@torproject.org>
Mon, 21 Jun 2010 16:26:21 +0000 (12:26 -0400)
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
include/event2/bufferevent.h

index 75ff9b72cf9ab44fdc2532caf3a8af8cdfb9e16d..8d3f7cbae94ac5fb9591e45185c7afb4101d87b1 100644 (file)
@@ -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);
+}
index 02cabe67ea311c7b4f5d7b4c5e44eca02d7e5e2d..55e44f9c6f026ee2817f64eba92fcf0fb4129882 100644 (file)
@@ -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.