[vlc-commits] threads: remove uneeded vlc_cond_value()

Steve Lhomme git at videolan.org
Mon Feb 10 14:54:11 CET 2020


vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Mon Feb 10 09:42:25 2020 +0100| [534cfb963ab79cd1c8d1e5e63468ccc94cb4fd3d] | committer: Steve Lhomme

threads: remove uneeded vlc_cond_value()

We can use the atomic variable directly without any cast.

Only the C++ user need to be checked for the proper storage size/alignment of
the variable they pass.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=534cfb963ab79cd1c8d1e5e63468ccc94cb4fd3d
---

 src/misc/threads.c | 31 +++++++++++++------------------
 1 file changed, 13 insertions(+), 18 deletions(-)

diff --git a/src/misc/threads.c b/src/misc/threads.c
index 7edb369bed..7855ae11b9 100644
--- a/src/misc/threads.c
+++ b/src/misc/threads.c
@@ -198,20 +198,15 @@ void (vlc_tick_sleep)(vlc_tick_t delay)
 #ifdef LIBVLC_NEED_CONDVAR
 #include <stdalign.h>
 
-static inline atomic_uint *vlc_cond_value(vlc_cond_t *cond)
+void vlc_cond_init(vlc_cond_t *cond)
 {
     /* Don't use C++ atomic types in vlc_threads.h for the C atomic storage */
     static_assert (sizeof (cond->cpp_value) <= sizeof (cond->value),
                    "Size mismatch!");
     static_assert ((alignof (cond->cpp_value) % alignof (cond->value)) == 0,
                    "Alignment mismatch");
-    return &cond->value;
-}
-
-void vlc_cond_init(vlc_cond_t *cond)
-{
     /* Initial value is irrelevant but set it for happy debuggers */
-    atomic_init(vlc_cond_value(cond), 0);
+    atomic_init(&cond->value, 0);
 }
 
 void vlc_cond_init_daytime(vlc_cond_t *cond)
@@ -222,7 +217,7 @@ void vlc_cond_init_daytime(vlc_cond_t *cond)
 void vlc_cond_destroy(vlc_cond_t *cond)
 {
     /* Tempting sanity check but actually incorrect:
-    assert((atomic_load_explicit(vlc_cond_value(cond),
+    assert((atomic_load_explicit(&cond->value,
                                  memory_order_relaxed) & 1) == 0);
      * Due to timeouts and spurious wake-ups, the futex value can look like
      * there are waiters, even though there are none. */
@@ -240,53 +235,53 @@ void vlc_cond_signal(vlc_cond_t *cond)
      * - cnd_signal() sets the futex to the equal-or-next odd value, while
      * - cnd_wait() sets the futex to the equal-or-next even value.
      **/
-    atomic_fetch_or_explicit(vlc_cond_value(cond), 1, memory_order_relaxed);
+    atomic_fetch_or_explicit(&cond->value, 1, memory_order_relaxed);
     vlc_atomic_notify_one(&cond->value);
 }
 
 void vlc_cond_broadcast(vlc_cond_t *cond)
 {
-    atomic_fetch_or_explicit(vlc_cond_value(cond), 1, memory_order_relaxed);
+    atomic_fetch_or_explicit(&cond->value, 1, memory_order_relaxed);
     vlc_atomic_notify_all(&cond->value);
 }
 
 void vlc_cond_wait(vlc_cond_t *cond, vlc_mutex_t *mutex)
 {
-    unsigned value = atomic_load_explicit(vlc_cond_value(cond),
+    unsigned value = atomic_load_explicit(&cond->value,
                                      memory_order_relaxed);
     while (value & 1)
     {
-        if (atomic_compare_exchange_weak_explicit(vlc_cond_value(cond), &value,
+        if (atomic_compare_exchange_weak_explicit(&cond->value, &value,
                                                   value + 1,
                                                   memory_order_relaxed,
                                                   memory_order_relaxed))
             value++;
     }
 
-    vlc_cancel_addr_prepare(vlc_cond_value(cond));
+    vlc_cancel_addr_prepare(&cond->value);
     vlc_mutex_unlock(mutex);
 
     vlc_atomic_wait(&cond->value, value);
 
     vlc_mutex_lock(mutex);
-    vlc_cancel_addr_finish(vlc_cond_value(cond));
+    vlc_cancel_addr_finish(&cond->value);
 }
 
 static int vlc_cond_wait_delay(vlc_cond_t *cond, vlc_mutex_t *mutex,
                                vlc_tick_t delay)
 {
-    unsigned value = atomic_load_explicit(vlc_cond_value(cond),
+    unsigned value = atomic_load_explicit(&cond->value, 
                                           memory_order_relaxed);
     while (value & 1)
     {
-        if (atomic_compare_exchange_weak_explicit(vlc_cond_value(cond), &value,
+        if (atomic_compare_exchange_weak_explicit(&cond->value, &value,
                                                   value + 1,
                                                   memory_order_relaxed,
                                                   memory_order_relaxed))
             value++;
     }
 
-    vlc_cancel_addr_prepare(vlc_cond_value(cond));
+    vlc_cancel_addr_prepare(&cond->value);
     vlc_mutex_unlock(mutex);
 
     if (delay > 0)
@@ -295,7 +290,7 @@ static int vlc_cond_wait_delay(vlc_cond_t *cond, vlc_mutex_t *mutex,
         value = 0;
 
     vlc_mutex_lock(mutex);
-    vlc_cancel_addr_finish(vlc_cond_value(cond));
+    vlc_cancel_addr_finish(&cond->value);
 
     return value ? 0 : ETIMEDOUT;
 }



More information about the vlc-commits mailing list