mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-14 06:49:35 -04:00
Merge branch 'be-openssl-more-common-with-be-sock'
* be-openssl-more-common-with-be-sock: be_openssl: use bufferevent_enable() instead of bufferevent_add_event_() be_sock: drop be_sock_add() macro (useless and debug unfriendly) be: introduce bufferevent_generic_adj_existing_timeouts_() be_openssl: don't add events during bev creation (like be_sock) be: add_event: use evutil_timerisset()
This commit is contained in:
commit
29573f0db4
@ -412,6 +412,7 @@ void bufferevent_init_generic_timeout_cbs_(struct bufferevent *bev);
|
||||
* we delete it.) Call this from anything that changes the timeout values,
|
||||
* that enabled EV_READ or EV_WRITE, or that disables EV_READ or EV_WRITE. */
|
||||
int bufferevent_generic_adj_timeouts_(struct bufferevent *bev);
|
||||
int bufferevent_generic_adj_existing_timeouts_(struct bufferevent *bev);
|
||||
|
||||
enum bufferevent_options bufferevent_get_options_(struct bufferevent *bev);
|
||||
|
||||
|
@ -969,10 +969,33 @@ bufferevent_generic_adj_timeouts_(struct bufferevent *bev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
bufferevent_generic_adj_existing_timeouts_(struct bufferevent *bev)
|
||||
{
|
||||
int r = 0;
|
||||
if (event_pending(&bev->ev_read, EV_READ, NULL)) {
|
||||
if (evutil_timerisset(&bev->timeout_read)) {
|
||||
if (bufferevent_add_event_(&bev->ev_read, &bev->timeout_read) < 0)
|
||||
r = -1;
|
||||
} else {
|
||||
event_remove_timer(&bev->ev_read);
|
||||
}
|
||||
}
|
||||
if (event_pending(&bev->ev_write, EV_WRITE, NULL)) {
|
||||
if (evutil_timerisset(&bev->timeout_write)) {
|
||||
if (bufferevent_add_event_(&bev->ev_write, &bev->timeout_write) < 0)
|
||||
r = -1;
|
||||
} else {
|
||||
event_remove_timer(&bev->ev_write);
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
int
|
||||
bufferevent_add_event_(struct event *ev, const struct timeval *tv)
|
||||
{
|
||||
if (tv->tv_sec == 0 && tv->tv_usec == 0)
|
||||
if (!evutil_timerisset(tv))
|
||||
return event_add(ev, NULL);
|
||||
else
|
||||
return event_add(ev, tv);
|
||||
|
@ -1090,7 +1090,6 @@ set_handshake_callbacks(struct bufferevent_openssl *bev_ssl, evutil_socket_t fd)
|
||||
return do_handshake(bev_ssl);
|
||||
} else {
|
||||
struct bufferevent *bev = &bev_ssl->bev.bev;
|
||||
int r1=0, r2=0;
|
||||
|
||||
if (event_initialized(&bev->ev_read)) {
|
||||
event_del(&bev->ev_read);
|
||||
@ -1103,11 +1102,9 @@ set_handshake_callbacks(struct bufferevent_openssl *bev_ssl, evutil_socket_t fd)
|
||||
event_assign(&bev->ev_write, bev->ev_base, fd,
|
||||
EV_WRITE|EV_PERSIST|EV_FINALIZE,
|
||||
be_openssl_handshakeeventcb, bev_ssl);
|
||||
if (fd >= 0) {
|
||||
r1 = bufferevent_add_event_(&bev->ev_read, &bev->timeout_read);
|
||||
r2 = bufferevent_add_event_(&bev->ev_write, &bev->timeout_write);
|
||||
}
|
||||
return (r1<0 || r2<0) ? -1 : 0;
|
||||
if (fd >= 0)
|
||||
bufferevent_enable(bev, bev->enabled);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1159,9 +1156,6 @@ be_openssl_enable(struct bufferevent *bev, short events)
|
||||
struct bufferevent_openssl *bev_ssl = upcast(bev);
|
||||
int r1 = 0, r2 = 0;
|
||||
|
||||
if (bev_ssl->state != BUFFEREVENT_SSL_OPEN)
|
||||
return 0;
|
||||
|
||||
if (events & EV_READ)
|
||||
r1 = start_reading(bev_ssl);
|
||||
if (events & EV_WRITE)
|
||||
@ -1254,23 +1248,7 @@ be_openssl_adj_timeouts(struct bufferevent *bev)
|
||||
if (bev_ssl->underlying) {
|
||||
return bufferevent_generic_adj_timeouts_(bev);
|
||||
} else {
|
||||
int r1=0, r2=0;
|
||||
if (event_pending(&bev->ev_read, EV_READ, NULL)) {
|
||||
if (evutil_timerisset(&bev->timeout_read)) {
|
||||
r1 = bufferevent_add_event_(&bev->ev_read, &bev->timeout_read);
|
||||
} else {
|
||||
event_remove_timer(&bev->ev_read);
|
||||
}
|
||||
}
|
||||
if (event_pending(&bev->ev_write, EV_WRITE, NULL)) {
|
||||
if (evutil_timerisset(&bev->timeout_write)) {
|
||||
r2 = bufferevent_add_event_(&bev->ev_write, &bev->timeout_write);
|
||||
} else {
|
||||
event_remove_timer(&bev->ev_write);
|
||||
}
|
||||
}
|
||||
|
||||
return (r1<0 || r2<0) ? -1 : 0;
|
||||
return bufferevent_generic_adj_existing_timeouts_(bev);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1394,15 +1372,6 @@ bufferevent_openssl_new_impl(struct event_base *base,
|
||||
if (state == BUFFEREVENT_SSL_OPEN)
|
||||
bufferevent_suspend_read_(underlying,
|
||||
BEV_SUSPEND_FILT_READ);
|
||||
} else {
|
||||
struct bufferevent *bev = &bev_ssl->bev.bev;
|
||||
bev->enabled = EV_READ|EV_WRITE;
|
||||
if (state != BUFFEREVENT_SSL_OPEN)
|
||||
if (event_add(&bev->ev_read, NULL) < 0)
|
||||
goto err;
|
||||
if (event_initialized(&bev->ev_write))
|
||||
if (event_add(&bev->ev_write, NULL) < 0)
|
||||
goto err;
|
||||
}
|
||||
|
||||
return &bev_ssl->bev.bev;
|
||||
|
@ -79,7 +79,6 @@
|
||||
static int be_socket_enable(struct bufferevent *, short);
|
||||
static int be_socket_disable(struct bufferevent *, short);
|
||||
static void be_socket_destruct(struct bufferevent *);
|
||||
static int be_socket_adj_timeouts(struct bufferevent *);
|
||||
static int be_socket_flush(struct bufferevent *, short, enum bufferevent_flush_mode);
|
||||
static int be_socket_ctrl(struct bufferevent *, enum bufferevent_ctrl_op, union bufferevent_ctrl_data *);
|
||||
|
||||
@ -92,14 +91,11 @@ const struct bufferevent_ops bufferevent_ops_socket = {
|
||||
be_socket_disable,
|
||||
NULL, /* unlink */
|
||||
be_socket_destruct,
|
||||
be_socket_adj_timeouts,
|
||||
bufferevent_generic_adj_existing_timeouts_,
|
||||
be_socket_flush,
|
||||
be_socket_ctrl,
|
||||
};
|
||||
|
||||
#define be_socket_add(ev, t) \
|
||||
bufferevent_add_event_((ev), (t))
|
||||
|
||||
const struct sockaddr*
|
||||
bufferevent_socket_get_conn_address_(struct bufferevent *bev)
|
||||
{
|
||||
@ -140,7 +136,7 @@ bufferevent_socket_outbuf_cb(struct evbuffer *buf,
|
||||
!bufev_p->write_suspended) {
|
||||
/* Somebody added data to the buffer, and we would like to
|
||||
* write, and we were not writing. So, start writing. */
|
||||
if (be_socket_add(&bufev->ev_write, &bufev->timeout_write) == -1) {
|
||||
if (bufferevent_add_event_(&bufev->ev_write, &bufev->timeout_write) == -1) {
|
||||
/* Should we log this? */
|
||||
}
|
||||
}
|
||||
@ -577,14 +573,12 @@ bufferevent_new(evutil_socket_t fd,
|
||||
static int
|
||||
be_socket_enable(struct bufferevent *bufev, short event)
|
||||
{
|
||||
if (event & EV_READ) {
|
||||
if (be_socket_add(&bufev->ev_read,&bufev->timeout_read) == -1)
|
||||
if (event & EV_READ &&
|
||||
bufferevent_add_event_(&bufev->ev_read, &bufev->timeout_read) == -1)
|
||||
return -1;
|
||||
}
|
||||
if (event & EV_WRITE) {
|
||||
if (be_socket_add(&bufev->ev_write,&bufev->timeout_write) == -1)
|
||||
if (event & EV_WRITE &&
|
||||
bufferevent_add_event_(&bufev->ev_write, &bufev->timeout_write) == -1)
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -619,29 +613,6 @@ be_socket_destruct(struct bufferevent *bufev)
|
||||
EVUTIL_CLOSESOCKET(fd);
|
||||
}
|
||||
|
||||
static int
|
||||
be_socket_adj_timeouts(struct bufferevent *bufev)
|
||||
{
|
||||
int r = 0;
|
||||
if (event_pending(&bufev->ev_read, EV_READ, NULL)) {
|
||||
if (evutil_timerisset(&bufev->timeout_read)) {
|
||||
if (be_socket_add(&bufev->ev_read, &bufev->timeout_read) < 0)
|
||||
r = -1;
|
||||
} else {
|
||||
event_remove_timer(&bufev->ev_read);
|
||||
}
|
||||
}
|
||||
if (event_pending(&bufev->ev_write, EV_WRITE, NULL)) {
|
||||
if (evutil_timerisset(&bufev->timeout_write)) {
|
||||
if (be_socket_add(&bufev->ev_write, &bufev->timeout_write) < 0)
|
||||
r = -1;
|
||||
} else {
|
||||
event_remove_timer(&bufev->ev_write);
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
static int
|
||||
be_socket_flush(struct bufferevent *bev, short iotype,
|
||||
enum bufferevent_flush_mode mode)
|
||||
|
Loading…
x
Reference in New Issue
Block a user