From a650153dcacb60fa7b611301abf86c0e70b1adcb Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Tue, 5 Jun 2012 14:12:54 -0700 Subject: [PATCH] Refresh of rs-spin --- src/rsocket.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/rsocket.c b/src/rsocket.c index 156a6fbf..5776806b 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -937,6 +937,29 @@ static int rs_process_cq(struct rsocket *rs, int nonblock, int (*test)(struct rs return ret; } +static int rs_get_comp(struct rsocket *rs, int nonblock, int (*test)(struct rsocket *rs)) +{ + struct timeval s, e; + long long poll_time = 0; + int ret; + + do { + ret = rs_process_cq(rs, 1, test); + if (!ret || nonblock || errno != EWOULDBLOCK) + return ret; + + if (!poll_time) + gettimeofday(&s, NULL); + + gettimeofday(&e, NULL); + poll_time = (e.tv_sec - s.tv_sec) * 1000000 + + (e.tv_usec - s.tv_usec) + 1; + } while (poll_time < polling_time); + + ret = rs_process_cq(rs, 0, test); + return ret; +} + static int rs_nonblocking(struct rsocket *rs, int flags) { return (rs->fd_flags & O_NONBLOCK) || (flags & MSG_DONTWAIT); -- 2.45.2