[vlc-commits] Android: remove vlc_thread_t.detached and simplify
Rémi Denis-Courmont
git at videolan.org
Fri Oct 12 21:37:01 CEST 2012
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Oct 12 22:19:40 2012 +0300| [031b7ba0a684661df8b724d3ced1036d3b6e340f] | committer: Rémi Denis-Courmont
Android: remove vlc_thread_t.detached and simplify
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=031b7ba0a684661df8b724d3ced1036d3b6e340f
---
src/android/thread.c | 81 +++++++++++++++++++++++++-------------------------
1 file changed, 40 insertions(+), 41 deletions(-)
diff --git a/src/android/thread.c b/src/android/thread.c
index 18965d6..c98da13 100644
--- a/src/android/thread.c
+++ b/src/android/thread.c
@@ -175,7 +175,6 @@ struct vlc_thread
vlc_atomic_t killed;
vlc_atomic_t finished;
bool killable;
- bool detached;
};
static __thread struct vlc_thread *thread = NULL;
@@ -185,21 +184,6 @@ void vlc_threads_setup (libvlc_int_t *p_libvlc)
(void)p_libvlc;
}
-static void *andro_Thread(void *data)
-{
- thread = data;
- void *ret = thread->entry(thread->data);
- if (thread->detached) {
- /* release thread handle */
- vlc_mutex_destroy(&thread->lock);
- free(thread);
- } else {
- vlc_atomic_set(&thread->finished, true);
- /* thread handle will be freed when vlc_join() is called */
- }
- return ret;
-}
-
/* cond */
void vlc_cond_init (vlc_cond_t *p_condvar)
@@ -279,8 +263,32 @@ int vlc_cond_timedwait (vlc_cond_t *p_condvar, vlc_mutex_t *p_mutex,
/* pthread */
-static int vlc_clone_attr (vlc_thread_t *th, pthread_attr_t *attr,
- void *(*entry) (void *), void *data, int priority)
+static void *detached_thread(void *data)
+{
+ vlc_thread_t th = data;
+
+ thread = th;
+ th->entry(th->data);
+
+ /* release thread handle */
+ vlc_mutex_destroy(&th->lock);
+ free(th);
+ return NULL;
+}
+
+static void *joinable_thread(void *data)
+{
+ vlc_thread_t th = data;
+ void *ret;
+
+ thread = th;
+ ret = th->entry(th->data);
+ vlc_atomic_set(&th->finished, true);
+ return ret;
+}
+
+static int vlc_clone_attr (vlc_thread_t *th, void *(*entry) (void *),
+ void *data, bool detach)
{
int ret;
@@ -297,43 +305,37 @@ static int vlc_clone_attr (vlc_thread_t *th, pthread_attr_t *attr,
pthread_sigmask (SIG_BLOCK, &set, &oldset);
}
- (void) priority;
-
vlc_thread_t thread = malloc (sizeof (*thread));
- if (unlikely(thread == NULL)) {
- if (attr)
- pthread_attr_destroy(attr);
+ if (unlikely(thread == NULL))
return ENOMEM;
- }
vlc_atomic_set(&thread->killed, false);
vlc_atomic_set(&thread->finished, false);
thread->killable = true;
- int state = PTHREAD_CREATE_JOINABLE;
- if (attr)
- pthread_attr_getdetachstate(attr, &state);
- thread->detached = state == PTHREAD_CREATE_DETACHED;
thread->cond = NULL;
thread->entry = entry;
thread->data = data;
vlc_mutex_init(&thread->lock);
- *th = thread;
- ret = pthread_create (&thread->thread, attr, andro_Thread, thread);
+ pthread_attr_t attr;
+ pthread_attr_init (&attr);
+ pthread_attr_setdetachstate (&attr, detach ? PTHREAD_CREATE_DETACHED
+ : PTHREAD_CREATE_JOINABLE);
+
+ ret = pthread_create (&thread->thread, attr,
+ detach ? detached_thread : joinable_thread, thread);
+ pthread_attr_destroy (&attr);
pthread_sigmask (SIG_SETMASK, &oldset, NULL);
- if (attr)
- pthread_attr_destroy (attr);
+ *th = thread;
return ret;
}
int vlc_clone (vlc_thread_t *th, void *(*entry) (void *), void *data,
int priority)
{
- pthread_attr_t attr;
-
- pthread_attr_init (&attr);
- return vlc_clone_attr (th, &attr, entry, data, priority);
+ (void) priority;
+ return vlc_clone_attr (th, entry, data, false);
}
void vlc_join (vlc_thread_t handle, void **result)
@@ -352,14 +354,11 @@ int vlc_clone_detach (vlc_thread_t *th, void *(*entry) (void *), void *data,
int priority)
{
vlc_thread_t dummy;
- pthread_attr_t attr;
-
if (th == NULL)
th = &dummy;
- pthread_attr_init (&attr);
- pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
- return vlc_clone_attr (th, &attr, entry, data, priority);
+ (void) priority;
+ return vlc_clone_attr (th, entry, data, true);
}
int vlc_set_priority (vlc_thread_t th, int priority)
More information about the vlc-commits
mailing list