mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-19 01:04:58 -04:00
Add watermark introspection
This commit is contained in:
parent
13a9a020e1
commit
4ce242bd00
@ -596,6 +596,27 @@ bufferevent_setwatermark(struct bufferevent *bufev, short events,
|
||||
BEV_UNLOCK(bufev);
|
||||
}
|
||||
|
||||
void
|
||||
bufferevent_getwatermark(struct bufferevent *bufev, short events,
|
||||
size_t *lowmark, size_t *highmark)
|
||||
{
|
||||
BEV_LOCK(bufev);
|
||||
if (events & EV_WRITE) {
|
||||
if (lowmark)
|
||||
*lowmark = bufev->wm_write.low;
|
||||
if (highmark)
|
||||
*highmark = bufev->wm_write.high;
|
||||
}
|
||||
|
||||
if (events & EV_READ) {
|
||||
if (lowmark)
|
||||
*lowmark = bufev->wm_read.low;
|
||||
if (highmark)
|
||||
*highmark = bufev->wm_read.high;
|
||||
}
|
||||
BEV_UNLOCK(bufev);
|
||||
}
|
||||
|
||||
int
|
||||
bufferevent_flush(struct bufferevent *bufev,
|
||||
short iotype,
|
||||
|
@ -507,6 +507,18 @@ int bufferevent_set_timeouts(struct bufferevent *bufev,
|
||||
void bufferevent_setwatermark(struct bufferevent *bufev, short events,
|
||||
size_t lowmark, size_t highmark);
|
||||
|
||||
/**
|
||||
Retrieves the watermarks for read or write events. Result is undefined if
|
||||
events contains both EV_READ and EV_WRITE.
|
||||
|
||||
@param bufev the bufferevent to be examined
|
||||
@param events EV_READ or EV_WRITE
|
||||
@param lowmark receives the lower watermark if not NULL
|
||||
@param highmark receives the high watermark if not NULL
|
||||
*/
|
||||
void bufferevent_getwatermark(struct bufferevent *bufev, short events,
|
||||
size_t *lowmark, size_t *highmark);
|
||||
|
||||
/**
|
||||
Acquire the lock on a bufferevent. Has no effect if locking was not
|
||||
enabled with BEV_OPT_THREADSAFE.
|
||||
|
@ -243,6 +243,7 @@ test_bufferevent_watermarks_impl(int use_pair)
|
||||
{
|
||||
struct bufferevent *bev1 = NULL, *bev2 = NULL;
|
||||
char buffer[65000];
|
||||
size_t low, high;
|
||||
int i;
|
||||
test_ok = 0;
|
||||
|
||||
@ -262,16 +263,30 @@ test_bufferevent_watermarks_impl(int use_pair)
|
||||
bufferevent_disable(bev1, EV_READ);
|
||||
bufferevent_enable(bev2, EV_READ);
|
||||
|
||||
/* By default, low watermarks are set to 0 */
|
||||
bufferevent_getwatermark(bev1, EV_READ, &low, NULL);
|
||||
tt_int_op(low, ==, 0);
|
||||
bufferevent_getwatermark(bev2, EV_WRITE, &low, NULL);
|
||||
tt_int_op(low, ==, 0);
|
||||
|
||||
for (i = 0; i < (int)sizeof(buffer); i++)
|
||||
buffer[i] = (char)i;
|
||||
|
||||
/* limit the reading on the receiving bufferevent */
|
||||
bufferevent_setwatermark(bev2, EV_READ, 10, 20);
|
||||
|
||||
bufferevent_getwatermark(bev2, EV_READ, &low, &high);
|
||||
tt_int_op(low, ==, 10);
|
||||
tt_int_op(high, ==, 20);
|
||||
|
||||
/* Tell the sending bufferevent not to notify us till it's down to
|
||||
100 bytes. */
|
||||
bufferevent_setwatermark(bev1, EV_WRITE, 100, 2000);
|
||||
|
||||
bufferevent_getwatermark(bev1, EV_WRITE, &low, &high);
|
||||
tt_int_op(low, ==, 100);
|
||||
tt_int_op(high, ==, 2000);
|
||||
|
||||
bufferevent_write(bev1, buffer, sizeof(buffer));
|
||||
|
||||
event_dispatch();
|
||||
|
Loading…
x
Reference in New Issue
Block a user