---
lib/poll-loop.c | 11 +++++++++++
lib/poll-loop.h | 3 +++
2 files changed, 14 insertions(+)
diff --git a/lib/poll-loop.c b/lib/poll-loop.c
index e83d989..63c7a42 100644
--- a/lib/poll-loop.c
+++ b/lib/poll-loop.c
@@ -53,6 +53,7 @@ struct poll_loop {
* wake up immediately, or LLONG_MAX to wait forever. */
long long int timeout_when; /* In msecs as returned by time_msec(). */
const char *timeout_where; /* Where 'timeout_when' was set. */
+ bool waken_by_timer;
};
static struct poll_loop *poll_loop(void);
@@ -365,11 +366,14 @@ poll_block(void)
loop->timeout_when, &elapsed);
if (retval < 0) {
static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
+ loop->waken_by_timer = false;
VLOG_ERR_RL(&rl, "poll: %s", ovs_strerror(-retval));
} else if (!retval) {
+ loop->waken_by_timer = true;
log_wakeup(loop->timeout_where, NULL, elapsed);
} else if (get_cpu_usage() > 50 || VLOG_IS_DBG_ENABLED()) {
i = 0;
+ loop->waken_by_timer = false;
HMAP_FOR_EACH (node, hmap_node, &loop->poll_nodes) {
if (pollfds[i].revents) {
log_wakeup(node->where, &pollfds[i], 0);
@@ -389,6 +393,13 @@ poll_block(void)
seq_woke();
}
+
+bool
+poll_block_waken_by_timer(void)
+{
+ return poll_loop()->waken_by_timer;
+}
+
static void
free_poll_loop(void *loop_)
diff --git a/lib/poll-loop.h b/lib/poll-loop.h
index 01e1aa8..b0a4cff 100644
--- a/lib/poll-loop.h
+++ b/lib/poll-loop.h
@@ -70,6 +70,9 @@ void poll_immediate_wake_at(const char *where);
/* Wait until an event occurs. */
void poll_block(void);
+/* Return true if the last poll block was waken by timer*/
+bool poll_block_waken_by_timer(void);
+
#ifdef __cplusplus
}
#endif
--
1.9.1
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev