#include <stdbool.h>
+#include "coverage.h"
#include "hash.h"
#include "hmap.h"
#include "latch.h"
#include "ovs-thread.h"
#include "poll-loop.h"
+COVERAGE_DEFINE(seq_change);
+
/* A sequence number object. */
struct seq {
uint64_t value OVS_GUARDED;
struct hmap_node hmap_node OVS_GUARDED; /* In 'seq->waiters'. */
unsigned int ovsthread_id OVS_GUARDED; /* Key in 'waiters' hmap. */
- struct seq_thread *thread OVS_GUARDED; /* Thread preparing to wait. */
- struct list list_node OVS_GUARDED; /* In 'thread->waiters'. */
+ struct seq_thread *thread OVS_GUARDED; /* Thread preparing to wait. */
+ struct ovs_list list_node OVS_GUARDED; /* In 'thread->waiters'. */
uint64_t value OVS_GUARDED; /* seq->value we're waiting to change. */
};
/* A thread that might be waiting on one or more seqs. */
struct seq_thread {
- struct list waiters OVS_GUARDED; /* Contains 'struct seq_waiter's. */
+ struct ovs_list waiters OVS_GUARDED; /* Contains 'struct seq_waiter's. */
struct latch latch OVS_GUARDED; /* Wakeup latch for this thread. */
bool waiting OVS_GUARDED; /* True if latch_wait() already called. */
};
seq_init();
seq = xmalloc(sizeof *seq);
+
+ COVERAGE_INC(seq_change);
+
ovs_mutex_lock(&seq_mutex);
seq->value = seq_next++;
hmap_init(&seq->waiters);
seq_change(struct seq *seq)
OVS_EXCLUDED(seq_mutex)
{
+ COVERAGE_INC(seq_change);
+
ovs_mutex_lock(&seq_mutex);
seq->value = seq_next++;
seq_wake_waiters(seq);