mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-14 06:49:35 -04:00
Add a function to retrieve the other side of a bufferevent pair
This commit is contained in:
parent
44d57eee93
commit
17a8e2d72b
@ -306,6 +306,21 @@ be_pair_flush(struct bufferevent *bev, short iotype,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct bufferevent *
|
||||||
|
bufferevent_pair_get_partner(struct bufferevent *bev)
|
||||||
|
{
|
||||||
|
struct bufferevent_pair *bev_p;
|
||||||
|
struct bufferevent *partner;
|
||||||
|
bev_p = upcast(bev);
|
||||||
|
if (! bev_p)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
incref_and_lock(bev);
|
||||||
|
partner = downcast(bev_p->partner);
|
||||||
|
decref_and_unlock(bev);
|
||||||
|
return partner;
|
||||||
|
}
|
||||||
|
|
||||||
const struct bufferevent_ops bufferevent_ops_pair = {
|
const struct bufferevent_ops bufferevent_ops_pair = {
|
||||||
"pair_elt",
|
"pair_elt",
|
||||||
evutil_offsetof(struct bufferevent_pair, bev.bev),
|
evutil_offsetof(struct bufferevent_pair, bev.bev),
|
||||||
|
@ -523,10 +523,15 @@ bufferevent_filter_new(struct bufferevent *underlying,
|
|||||||
@param pair A pointer to an array to hold the two new bufferevent objects.
|
@param pair A pointer to an array to hold the two new bufferevent objects.
|
||||||
@return 0 on success, -1 on failure.
|
@return 0 on success, -1 on failure.
|
||||||
*/
|
*/
|
||||||
int
|
int bufferevent_pair_new(struct event_base *base, int options,
|
||||||
bufferevent_pair_new(struct event_base *base, int options,
|
|
||||||
struct bufferevent *pair[2]);
|
struct bufferevent *pair[2]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Given one bufferevent returned by bufferevent_pair_new(), returns the
|
||||||
|
other one if it still exists. Otherwise returns NULL.
|
||||||
|
*/
|
||||||
|
struct bufferevent *bufferevent_pair_get_partner(struct bufferevent *bev);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Abstract type used to configure rate-limiting on a bufferevent or a group
|
Abstract type used to configure rate-limiting on a bufferevent or a group
|
||||||
of bufferevents.
|
of bufferevents.
|
||||||
|
@ -131,11 +131,15 @@ test_bufferevent_impl(int use_pair)
|
|||||||
bufferevent_setcb(bev2, readcb, writecb, errorcb, NULL);
|
bufferevent_setcb(bev2, readcb, writecb, errorcb, NULL);
|
||||||
tt_int_op(bufferevent_getfd(bev1), ==, -1);
|
tt_int_op(bufferevent_getfd(bev1), ==, -1);
|
||||||
tt_ptr_op(bufferevent_get_underlying(bev1), ==, NULL);
|
tt_ptr_op(bufferevent_get_underlying(bev1), ==, NULL);
|
||||||
|
tt_ptr_op(bufferevent_pair_get_partner(bev1), ==, bev2);
|
||||||
|
tt_ptr_op(bufferevent_pair_get_partner(bev2), ==, bev1);
|
||||||
} else {
|
} else {
|
||||||
bev1 = bufferevent_new(pair[0], readcb, writecb, errorcb, NULL);
|
bev1 = bufferevent_new(pair[0], readcb, writecb, errorcb, NULL);
|
||||||
bev2 = bufferevent_new(pair[1], readcb, writecb, errorcb, NULL);
|
bev2 = bufferevent_new(pair[1], readcb, writecb, errorcb, NULL);
|
||||||
tt_int_op(bufferevent_getfd(bev1), ==, pair[0]);
|
tt_int_op(bufferevent_getfd(bev1), ==, pair[0]);
|
||||||
tt_ptr_op(bufferevent_get_underlying(bev1), ==, NULL);
|
tt_ptr_op(bufferevent_get_underlying(bev1), ==, NULL);
|
||||||
|
tt_ptr_op(bufferevent_pair_get_partner(bev1), ==, NULL);
|
||||||
|
tt_ptr_op(bufferevent_pair_get_partner(bev2), ==, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bufferevent_disable(bev1, EV_READ);
|
bufferevent_disable(bev1, EV_READ);
|
||||||
@ -152,6 +156,7 @@ test_bufferevent_impl(int use_pair)
|
|||||||
event_dispatch();
|
event_dispatch();
|
||||||
|
|
||||||
bufferevent_free(bev1);
|
bufferevent_free(bev1);
|
||||||
|
tt_ptr_op(bufferevent_pair_get_partner(bev2), ==, NULL);
|
||||||
bufferevent_free(bev2);
|
bufferevent_free(bev2);
|
||||||
|
|
||||||
if (test_ok != 2)
|
if (test_ok != 2)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user