mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-13 06:16:10 -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;
|
||||
}
|
||||
|
||||
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 = {
|
||||
"pair_elt",
|
||||
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.
|
||||
@return 0 on success, -1 on failure.
|
||||
*/
|
||||
int
|
||||
bufferevent_pair_new(struct event_base *base, int options,
|
||||
int bufferevent_pair_new(struct event_base *base, int options,
|
||||
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
|
||||
of bufferevents.
|
||||
|
@ -131,11 +131,15 @@ test_bufferevent_impl(int use_pair)
|
||||
bufferevent_setcb(bev2, readcb, writecb, errorcb, NULL);
|
||||
tt_int_op(bufferevent_getfd(bev1), ==, -1);
|
||||
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 {
|
||||
bev1 = bufferevent_new(pair[0], readcb, writecb, errorcb, NULL);
|
||||
bev2 = bufferevent_new(pair[1], readcb, writecb, errorcb, NULL);
|
||||
tt_int_op(bufferevent_getfd(bev1), ==, pair[0]);
|
||||
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);
|
||||
@ -152,6 +156,7 @@ test_bufferevent_impl(int use_pair)
|
||||
event_dispatch();
|
||||
|
||||
bufferevent_free(bev1);
|
||||
tt_ptr_op(bufferevent_pair_get_partner(bev2), ==, NULL);
|
||||
bufferevent_free(bev2);
|
||||
|
||||
if (test_ok != 2)
|
||||
|
Loading…
x
Reference in New Issue
Block a user