]> granicus.if.org Git - libevent/commitdiff
Fix up behavior of never-defered callbacks a little
authorNick Mathewson <nickm@torproject.org>
Tue, 22 Dec 2009 20:52:02 +0000 (15:52 -0500)
committerNick Mathewson <nickm@torproject.org>
Tue, 22 Dec 2009 20:52:12 +0000 (15:52 -0500)
buffer.c
evbuffer-internal.h
include/event2/buffer.h

index be9c7ec96e43d1ba312b94380392236e2f0b7719..c748dab273a92800d47fe1a5c71e2e80e68f00ff 100644 (file)
--- a/buffer.c
+++ b/buffer.c
@@ -333,6 +333,7 @@ evbuffer_run_callbacks(struct evbuffer *buffer, int running_deferred)
         struct evbuffer_cb_info info;
        size_t new_size;
        uint32_t mask, masked_val;
+       int clear = 1;
 
        if (running_deferred) {
                mask = EVBUFFER_CB_NODEFER|EVBUFFER_CB_ENABLED;
@@ -340,6 +341,8 @@ evbuffer_run_callbacks(struct evbuffer *buffer, int running_deferred)
        } else if (buffer->deferred_cbs) {
                mask = EVBUFFER_CB_NODEFER|EVBUFFER_CB_ENABLED;
                masked_val = EVBUFFER_CB_NODEFER|EVBUFFER_CB_ENABLED;
+/* Don't zero-out n_add/n_del, since */
+               clear = 0;
        } else {
                mask = EVBUFFER_CB_ENABLED;
                masked_val = EVBUFFER_CB_ENABLED;
index 7e08ee9be45c0f0feef1ed66cc3ef45a02137ba2..99dde3cec5405301e76284d6dc1482a05e347d8c 100644 (file)
@@ -36,6 +36,9 @@ extern "C" {
 #include "util-internal.h"
 #include "defer-internal.h"
 
+/* Experimental cb flag: "never deferred" */
+#define EVBUFFER_CB_NODEFER 2
+
 #ifdef WIN32
 #include <winsock2.h>
 #endif
@@ -59,11 +62,6 @@ struct evbuffer_cb_entry {
        void *cbarg;
         /** Currently set flags on this callback. */
        ev_uint32_t flags;
-#if 0
-        /** Size of the evbuffer before this callback was suspended, or 0
-            if this callback is not suspended. */
-       size_t size_before_suspend;
-#endif
 };
 
 struct bufferevent;
index 0fb6dffdf6db98454e27ce11987567d7d796b7bc..2a8e8378f44abbd8fb232a20dbfbac294167dd7c 100644 (file)
@@ -610,9 +610,6 @@ int evbuffer_remove_cb(struct evbuffer *buffer, evbuffer_cb_func cb, void *cbarg
  * should not be invoked. */
 #define EVBUFFER_CB_ENABLED 1
 
-/* Experimental cb flag: "never deferred" */
-#define EVBUFFER_CB_NODEFER 2
-
 /** Change the flags that are set for a callback on a buffer by adding more.
 
     @param buffer the evbuffer that the callback is watching.