[vlc-commits] interrupt: simplify using thread_local
Rémi Denis-Courmont
git at videolan.org
Thu Jun 15 21:32:26 CEST 2017
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Jun 15 22:30:02 2017 +0300| [fffde84939c77f998882583d6bdd82dbfb45ce62] | committer: Rémi Denis-Courmont
interrupt: simplify using thread_local
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=fffde84939c77f998882583d6bdd82dbfb45ce62
---
src/misc/interrupt.c | 36 ++++--------------------------------
1 file changed, 4 insertions(+), 32 deletions(-)
diff --git a/src/misc/interrupt.c b/src/misc/interrupt.c
index 4b4d997491..ba13145bf9 100644
--- a/src/misc/interrupt.c
+++ b/src/misc/interrupt.c
@@ -43,21 +43,13 @@
#include "interrupt.h"
#include "libvlc.h"
-static unsigned vlc_interrupt_refs = 0;
-static vlc_rwlock_t vlc_interrupt_lock = VLC_STATIC_RWLOCK;
-static vlc_threadvar_t vlc_interrupt_var;
+static thread_local vlc_interrupt_t *vlc_interrupt_var;
/**
* Initializes an interruption context.
*/
void vlc_interrupt_init(vlc_interrupt_t *ctx)
{
- vlc_rwlock_wrlock(&vlc_interrupt_lock);
- assert(vlc_interrupt_refs < UINT_MAX);
- if (vlc_interrupt_refs++ == 0)
- vlc_threadvar_create(&vlc_interrupt_var, NULL);
- vlc_rwlock_unlock(&vlc_interrupt_lock);
-
vlc_mutex_init(&ctx->lock);
ctx->interrupted = false;
atomic_init(&ctx->killed, false);
@@ -80,12 +72,6 @@ void vlc_interrupt_deinit(vlc_interrupt_t *ctx)
{
assert(ctx->callback == NULL);
vlc_mutex_destroy(&ctx->lock);
-
- vlc_rwlock_wrlock(&vlc_interrupt_lock);
- assert(vlc_interrupt_refs > 0);
- if (--vlc_interrupt_refs == 0)
- vlc_threadvar_delete(&vlc_interrupt_var);
- vlc_rwlock_unlock(&vlc_interrupt_lock);
}
void vlc_interrupt_destroy(vlc_interrupt_t *ctx)
@@ -112,29 +98,15 @@ void vlc_interrupt_raise(vlc_interrupt_t *ctx)
vlc_interrupt_t *vlc_interrupt_set(vlc_interrupt_t *newctx)
{
- vlc_interrupt_t *oldctx;
-
- /* This function is called to push or pop an interrupt context. Either way
- * either newctx or oldctx (or both) are non-NULL. Thus vlc_interrupt_refs
- * must be larger than zero and vlc_interrupt_var must be valid. And so the
- * read/write lock is not needed. */
- assert(vlc_interrupt_refs > 0);
-
- oldctx = vlc_threadvar_get(vlc_interrupt_var);
- vlc_threadvar_set(vlc_interrupt_var, newctx);
+ vlc_interrupt_t *oldctx = vlc_interrupt_var;
+ vlc_interrupt_var = newctx;
return oldctx;
}
static vlc_interrupt_t *vlc_interrupt_get(void)
{
- vlc_interrupt_t *ctx = NULL;
-
- vlc_rwlock_rdlock(&vlc_interrupt_lock);
- if (vlc_interrupt_refs > 0)
- ctx = vlc_threadvar_get(vlc_interrupt_var);
- vlc_rwlock_unlock(&vlc_interrupt_lock);
- return ctx;
+ return vlc_interrupt_var;
}
/**
More information about the vlc-commits
mailing list