mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-09 20:41:27 -04:00
fix a bug in which bufferevent_write_buffer would not schedule a write event
svn:r733
This commit is contained in:
parent
3a17aeed7a
commit
f6c4017381
@ -73,6 +73,7 @@ Changes in current version:
|
|||||||
o introduce bufferevent_read_buffer; allows reading without memory copy.
|
o introduce bufferevent_read_buffer; allows reading without memory copy.
|
||||||
o expose bufferevent_setwatermark via header files and fix high watermark on read
|
o expose bufferevent_setwatermark via header files and fix high watermark on read
|
||||||
o fix a bug in buffrevent read water marks and add a test for them
|
o fix a bug in buffrevent read water marks and add a test for them
|
||||||
|
o fix a bug in which bufferevent_write_buffer would not schedule a write event
|
||||||
|
|
||||||
Changes in 1.4.0:
|
Changes in 1.4.0:
|
||||||
o allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr.
|
o allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr.
|
||||||
|
31
evbuffer.c
31
evbuffer.c
@ -298,6 +298,14 @@ bufferevent_free(struct bufferevent *bufev)
|
|||||||
mm_free(bufev);
|
mm_free(bufev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
bufferevent_write_closure(struct bufferevent *bufev, int progress)
|
||||||
|
{
|
||||||
|
/* If everything is okay, we need to schedule a write */
|
||||||
|
if (progress && (bufev->enabled & EV_WRITE))
|
||||||
|
bufferevent_add(&bufev->ev_write, bufev->timeout_write);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Returns 0 on success;
|
* Returns 0 on success;
|
||||||
* -1 on failure.
|
* -1 on failure.
|
||||||
@ -306,24 +314,25 @@ bufferevent_free(struct bufferevent *bufev)
|
|||||||
int
|
int
|
||||||
bufferevent_write(struct bufferevent *bufev, const void *data, size_t size)
|
bufferevent_write(struct bufferevent *bufev, const void *data, size_t size)
|
||||||
{
|
{
|
||||||
int res;
|
if (evbuffer_add(bufev->output, data, size) == -1)
|
||||||
|
return (-1);
|
||||||
|
|
||||||
res = evbuffer_add(bufev->output, data, size);
|
bufferevent_write_closure(bufev, size > 0);
|
||||||
|
|
||||||
if (res == -1)
|
return (0);
|
||||||
return (res);
|
|
||||||
|
|
||||||
/* If everything is okay, we need to schedule a write */
|
|
||||||
if (size > 0 && (bufev->enabled & EV_WRITE))
|
|
||||||
bufferevent_add(&bufev->ev_write, bufev->timeout_write);
|
|
||||||
|
|
||||||
return (res);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf)
|
bufferevent_write_buffer(struct bufferevent *bufev, struct evbuffer *buf)
|
||||||
{
|
{
|
||||||
return (evbuffer_add_buffer(bufev->output, buf));
|
int len = EVBUFFER_LENGTH(bufev->output);
|
||||||
|
|
||||||
|
if (evbuffer_add_buffer(bufev->output, buf) == -1)
|
||||||
|
return (-1);
|
||||||
|
|
||||||
|
bufferevent_write_closure(bufev, len > 0);
|
||||||
|
|
||||||
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
|
Loading…
x
Reference in New Issue
Block a user