list: Rename struct list to struct ovs_list
[cascardo/ovs.git] / lib / seq.h
index c764809..b0ec6bf 100644 (file)
--- a/lib/seq.h
+++ b/lib/seq.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Nicira, Inc.
+ * Copyright (c) 2013, 2014 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -76,7 +76,7 @@
  * e.g.:
  *
  *    struct ovs_mutex mutex;
- *    struct list queue OVS_GUARDED_BY(mutex);
+ *    struct ovs_list queue OVS_GUARDED_BY(mutex);
  *    struct seq nonempty_seq;
  *
  * To add an element to the queue:
  * Thread-safety
  * =============
  *
- * Fully thread safe.
+ * Fully thread safe.  seq_change() synchronizes with seq_read() and
+ * seq_wait() on the same variable in release-acquire fashion.  That
+ * is, all effects of the memory accesses performed by a thread prior
+ * to seq_change() are visible to the threads returning from
+ * seq_read() or seq_wait() observing that change.
  */
 
 #include <stdint.h>
+#include "util.h"
 
 /* For implementation of an object with a sequence number attached. */
 struct seq *seq_create(void);
@@ -119,7 +124,9 @@ void seq_change(struct seq *);
 
 /* For observers. */
 uint64_t seq_read(const struct seq *);
-void seq_wait(const struct seq *, uint64_t value);
+
+void seq_wait_at(const struct seq *, uint64_t value, const char *where);
+#define seq_wait(seq, value) seq_wait_at(seq, value, OVS_SOURCE_LOCATOR)
 
 /* For poll_block() internal use. */
 void seq_woke(void);