[ovs-dev] [warp v2 1/3] timeval: Add Clang thread-safety annotations, fix unimportant violation.

Ben Pfaff blp at nicira.com
Fri Sep 13 20:01:50 UTC 2013


Signed-off-by: Ben Pfaff <blp at nicira.com>
---
 lib/timeval.c |   23 ++++++++++++++++-------
 1 file changed, 16 insertions(+), 7 deletions(-)

diff --git a/lib/timeval.c b/lib/timeval.c
index c24788a..64d65ea 100644
--- a/lib/timeval.c
+++ b/lib/timeval.c
@@ -44,10 +44,9 @@ struct clock {
 
     /* Features for use by unit tests.  Protected by 'rwlock'. */
     struct ovs_rwlock rwlock;
-    struct timespec warp;       /* Offset added for unit tests. */
-    bool stopped;               /* Disables real-time updates if true.  */
-
-    struct timespec cache;      /* Last time read from kernel. */
+    struct timespec warp OVS_GUARDED;  /* Offset added for unit tests. */
+    bool stopped OVS_GUARDED;          /* Disable real-time updates if true. */
+    struct timespec cache OVS_GUARDED; /* Last time read from kernel. */
 };
 
 /* Our clocks. */
@@ -320,14 +319,24 @@ timespec_add(struct timespec *sum,
     *sum = tmp;
 }
 
+static bool
+is_warped(const struct clock *c)
+{
+    bool warped;
+
+    ovs_rwlock_rdlock(&c->rwlock);
+    warped = monotonic_clock.warp.tv_sec || monotonic_clock.warp.tv_nsec;
+    ovs_rwlock_unlock(&c->rwlock);
+
+    return warped;
+}
+
 static void
 log_poll_interval(long long int last_wakeup)
 {
     long long int interval = time_msec() - last_wakeup;
 
-    if (interval >= 1000
-        && !monotonic_clock.warp.tv_sec
-        && !monotonic_clock.warp.tv_nsec) {
+    if (interval >= 1000 && !is_warped(&monotonic_clock)) {
         const struct rusage *last_rusage = get_recent_rusage();
         struct rusage rusage;
 
-- 
1.7.10.4




More information about the dev mailing list