Commit 94756f16 authored by KO Myung-Hun's avatar KO Myung-Hun Committed by Thomas Guillem

os2: implement vlc_once()

Signed-off-by: Thomas Guillem's avatarThomas Guillem <thomas@gllm.fr>
parent 6eb4e888
......@@ -125,6 +125,12 @@ typedef struct
#define VLC_STATIC_COND { NULLHANDLE, 0, NULLHANDLE, 0 }
#define LIBVLC_NEED_SEMAPHORE
#define LIBVLC_NEED_RWLOCK
typedef struct
{
unsigned done;
vlc_mutex_t mutex;
} vlc_once_t;
#define VLC_STATIC_ONCE { 0, VLC_STATIC_MUTEX }
typedef struct vlc_threadvar *vlc_threadvar_t;
typedef struct vlc_timer *vlc_timer_t;
......
......@@ -429,6 +429,34 @@ int vlc_cond_timedwait_daytime (vlc_cond_t *p_condvar, vlc_mutex_t *p_mutex,
return vlc_cond_wait_common (p_condvar, p_mutex, ulTimeout);
}
void vlc_once(vlc_once_t *once, void (*cb)(void))
{
unsigned done;
/* load once->done */
__atomic_xchg( &done, once->done );
/* not initialized ? */
if( done == 0 )
{
vlc_mutex_lock( &once->mutex );
/* load once->done */
__atomic_xchg( &done, once->done );
/* still not initialized ? */
if( done == 0 )
{
cb();
/* set once->done to 1 */
__atomic_xchg( &once->done, 1 );
}
vlc_mutex_unlock( &once->mutex );
}
}
/*** Thread-specific variables (TLS) ***/
struct vlc_threadvar
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment