mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-13 06:16:10 -04:00
Fix byte counts when mixing deferred and non-deferred evbuffer callbacks.
This patch finishes 390e0561, which was somehow committed in a half-finished state. It solves a failing unit test on windows.
This commit is contained in:
parent
ba2945f931
commit
29151e65b7
10
buffer.c
10
buffer.c
@ -341,7 +341,8 @@ evbuffer_run_callbacks(struct evbuffer *buffer, int running_deferred)
|
|||||||
} else if (buffer->deferred_cbs) {
|
} else if (buffer->deferred_cbs) {
|
||||||
mask = EVBUFFER_CB_NODEFER|EVBUFFER_CB_ENABLED;
|
mask = EVBUFFER_CB_NODEFER|EVBUFFER_CB_ENABLED;
|
||||||
masked_val = EVBUFFER_CB_NODEFER|EVBUFFER_CB_ENABLED;
|
masked_val = EVBUFFER_CB_NODEFER|EVBUFFER_CB_ENABLED;
|
||||||
/* Don't zero-out n_add/n_del, since */
|
/* Don't zero-out n_add/n_del, since the deferred callbacks
|
||||||
|
will want to see them. */
|
||||||
clear = 0;
|
clear = 0;
|
||||||
} else {
|
} else {
|
||||||
mask = EVBUFFER_CB_ENABLED;
|
mask = EVBUFFER_CB_ENABLED;
|
||||||
@ -361,9 +362,10 @@ evbuffer_run_callbacks(struct evbuffer *buffer, int running_deferred)
|
|||||||
info.orig_size = new_size + buffer->n_del_for_cb - buffer->n_add_for_cb;
|
info.orig_size = new_size + buffer->n_del_for_cb - buffer->n_add_for_cb;
|
||||||
info.n_added = buffer->n_add_for_cb;
|
info.n_added = buffer->n_add_for_cb;
|
||||||
info.n_deleted = buffer->n_del_for_cb;
|
info.n_deleted = buffer->n_del_for_cb;
|
||||||
buffer->n_add_for_cb = 0;
|
if (clear) {
|
||||||
buffer->n_del_for_cb = 0;
|
buffer->n_add_for_cb = 0;
|
||||||
|
buffer->n_del_for_cb = 0;
|
||||||
|
}
|
||||||
for (cbent = TAILQ_FIRST(&buffer->callbacks);
|
for (cbent = TAILQ_FIRST(&buffer->callbacks);
|
||||||
cbent != TAILQ_END(&buffer->callbacks);
|
cbent != TAILQ_END(&buffer->callbacks);
|
||||||
cbent = next) {
|
cbent = next) {
|
||||||
|
@ -36,7 +36,9 @@ extern "C" {
|
|||||||
#include "util-internal.h"
|
#include "util-internal.h"
|
||||||
#include "defer-internal.h"
|
#include "defer-internal.h"
|
||||||
|
|
||||||
/* Experimental cb flag: "never deferred" */
|
/* Experimental cb flag: "never deferred." Implementation note:
|
||||||
|
* these callbacks may get an inaccurate view of n_del/n_added in their
|
||||||
|
* arguments. */
|
||||||
#define EVBUFFER_CB_NODEFER 2
|
#define EVBUFFER_CB_NODEFER 2
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
Loading…
x
Reference in New Issue
Block a user