mirror of
https://github.com/cuberite/libevent.git
synced 2025-09-19 09:15:34 -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);
|
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
|
int
|
||||||
bufferevent_flush(struct bufferevent *bufev,
|
bufferevent_flush(struct bufferevent *bufev,
|
||||||
short iotype,
|
short iotype,
|
||||||
|
@ -507,6 +507,18 @@ int bufferevent_set_timeouts(struct bufferevent *bufev,
|
|||||||
void bufferevent_setwatermark(struct bufferevent *bufev, short events,
|
void bufferevent_setwatermark(struct bufferevent *bufev, short events,
|
||||||
size_t lowmark, size_t highmark);
|
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
|
Acquire the lock on a bufferevent. Has no effect if locking was not
|
||||||
enabled with BEV_OPT_THREADSAFE.
|
enabled with BEV_OPT_THREADSAFE.
|
||||||
|
@ -243,6 +243,7 @@ test_bufferevent_watermarks_impl(int use_pair)
|
|||||||
{
|
{
|
||||||
struct bufferevent *bev1 = NULL, *bev2 = NULL;
|
struct bufferevent *bev1 = NULL, *bev2 = NULL;
|
||||||
char buffer[65000];
|
char buffer[65000];
|
||||||
|
size_t low, high;
|
||||||
int i;
|
int i;
|
||||||
test_ok = 0;
|
test_ok = 0;
|
||||||
|
|
||||||
@ -262,16 +263,30 @@ test_bufferevent_watermarks_impl(int use_pair)
|
|||||||
bufferevent_disable(bev1, EV_READ);
|
bufferevent_disable(bev1, EV_READ);
|
||||||
bufferevent_enable(bev2, 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++)
|
for (i = 0; i < (int)sizeof(buffer); i++)
|
||||||
buffer[i] = (char)i;
|
buffer[i] = (char)i;
|
||||||
|
|
||||||
/* limit the reading on the receiving bufferevent */
|
/* limit the reading on the receiving bufferevent */
|
||||||
bufferevent_setwatermark(bev2, EV_READ, 10, 20);
|
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
|
/* Tell the sending bufferevent not to notify us till it's down to
|
||||||
100 bytes. */
|
100 bytes. */
|
||||||
bufferevent_setwatermark(bev1, EV_WRITE, 100, 2000);
|
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));
|
bufferevent_write(bev1, buffer, sizeof(buffer));
|
||||||
|
|
||||||
event_dispatch();
|
event_dispatch();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user