--- compat/os2threads.h | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-)
diff --git a/compat/os2threads.h b/compat/os2threads.h index b461f83..f2e5d9f 100644 --- a/compat/os2threads.h +++ b/compat/os2threads.h @@ -35,9 +35,15 @@ #include <sys/builtin.h> #include <sys/fmutex.h> -#include "libavutil/mem.h" +#include "libavutil/attributes.h" + +typedef struct { + TID tid; + void *(*start_routine)(void *); + void *arg; + void *result; +} pthread_t; -typedef TID pthread_t; typedef void pthread_attr_t; typedef HMTX pthread_mutex_t; @@ -57,39 +63,30 @@ typedef struct { #define PTHREAD_ONCE_INIT {0, _FMUTEX_INITIALIZER} -struct thread_arg { - void *(*start_routine)(void *); - void *arg; -}; - static void thread_entry(void *arg) { - struct thread_arg *thread_arg = arg; - - thread_arg->start_routine(thread_arg->arg); + pthread_t *thread = arg; - av_free(thread_arg); + thread->result = thread->start_routine(thread->arg); } static av_always_inline int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg) { - struct thread_arg *thread_arg; - - thread_arg = av_mallocz(sizeof(struct thread_arg)); - if (!thread_arg) - return ENOMEM; + thread->start_routine = start_routine; + thread->arg = arg; + thread->result = NULL; - thread_arg->start_routine = start_routine; - thread_arg->arg = arg; - - *thread = _beginthread(thread_entry, NULL, 256 * 1024, thread_arg); + thread->tid = _beginthread(thread_entry, NULL, 1024 * 1024, thread); return 0; } static av_always_inline int pthread_join(pthread_t thread, void **value_ptr) { - DosWaitThread((PTID)&thread, DCWW_WAIT); + DosWaitThread(&thread.tid, DCWW_WAIT); + + if (value_ptr) + *value_ptr = thread.result; return 0; } -- 2.7.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel