VLC 4.0.0-dev
No Matches
thread.c File Reference
Include dependency graph for thread.c:

Data Structures

struct  vlc_thread
struct  vlc_threadvar


#define NTDDI_WIN10_RS1   0x0A000002
#define LOOKUP(s)   (((s##_) = (void *)GetProcAddress(h, #s)) != NULL)


int vlc_threadvar_create (vlc_threadvar_t *p_tls, void(*destr)(void *))
 Allocates a thread-specific variable.
void vlc_threadvar_delete (vlc_threadvar_t *p_tls)
 Deallocates a thread-specific variable.
int vlc_threadvar_set (vlc_threadvar_t key, void *value)
 Sets a thread-specific variable.
void * vlc_threadvar_get (vlc_threadvar_t key)
 Gets the value of a thread-local variable for the calling thread.
static void vlc_threadvars_cleanup (void)
static HRESULT (WINAPI *SetThreadDescription_)(HANDLE
void vlc_atomic_wait (void *addr, unsigned val)
 Waits on an address.
int vlc_atomic_timedwait (void *addr, unsigned val, vlc_tick_t deadline)
 Waits on an address with a time-out.
int vlc_atomic_timedwait_daytime (void *addr, unsigned val, time_t deadline)
void vlc_atomic_notify_one (void *addr)
 Wakes up one thread on an address.
void vlc_atomic_notify_all (void *addr)
 Wakes up all thread on an address.
static unsigned __stdcall vlc_entry (void *p)
int vlc_clone (vlc_thread_t *p_handle, void *(*entry)(void *), void *data)
 Creates and starts a new thread.
void vlc_join (vlc_thread_t th, void **result)
 Waits for a thread to complete (if needed), then destroys it.
unsigned long vlc_thread_id (void)
 Thread identifier.
void() vlc_thread_set_name (const char *name)
 Set the thread name of the current thread.
static void CALLBACK vlc_cancel_self (ULONG_PTR self)
void vlc_cancel (vlc_thread_t th)
 Marks a thread as cancelled.
int vlc_savecancel (void)
 Disables thread cancellation.
void vlc_restorecancel (int state)
 Restores the cancellation state.
static _Noreturn void vlc_docancel (struct vlc_thread *th)
void vlc_testcancel (void)
 Issues an explicit deferred cancellation point.
void vlc_control_cancel (vlc_cleanup_t *cleaner)
 Internal handler for thread cancellation.
static vlc_tick_t mdate_perf (void)
static vlc_tick_t mdate_perf_100ns (void)
static vlc_tick_t mdate_wall (void)
vlc_tick_t vlc_tick_now (void)
 Precision monotonic clock.
void() vlc_tick_wait (vlc_tick_t deadline)
 Waits until a deadline.
void() vlc_tick_sleep (vlc_tick_t delay)
 Waits for an interval of time.
static void SelectClockSource (libvlc_int_t *obj)
unsigned vlc_GetCPUCount (void)
 Count CPUs.
void vlc_threads_setup (libvlc_int_t *vlc)
int __stdcall DllMain (void *hinstDll, unsigned long fdwReason, void *lpvReserved)


static SRWLOCK super_lock = SRWLOCK_INIT
static thread_local struct vlc_threadcurrent_thread_ctx = NULL
struct vlc_threadvarvlc_threadvar_last = NULL
static PCWSTR
union { 
   struct { 
      LARGE_INTEGER   freq 
   }   perf 
static vlc_tick_t(* mdate_selected )(void) = mdate_wall

Macro Definition Documentation




#define LOOKUP (   s)    (((s##_) = (void *)GetProcAddress(h, #s)) != NULL)


#define NTDDI_WIN10_RS1   0x0A000002

Function Documentation

◆ DllMain()

int __stdcall DllMain ( void *  hinstDll,
unsigned long  fdwReason,
void *  lpvReserved 

References LOOKUP, and vlc_threadvars_cleanup().


static HRESULT ( WINAPI *  SetThreadDescription_)

◆ mdate_perf()

static vlc_tick_t mdate_perf ( void  )

References clk, unlikely, and vlc_tick_from_frac().

Referenced by SelectClockSource().

◆ mdate_perf_100ns()

static vlc_tick_t mdate_perf_100ns ( void  )

References unlikely, and VLC_TICK_FROM_MSFTIME.

Referenced by SelectClockSource().

◆ mdate_wall()

static vlc_tick_t mdate_wall ( void  )

◆ SelectClockSource()

static void SelectClockSource ( libvlc_int_t obj)

◆ vlc_atomic_notify_all()

void vlc_atomic_notify_all ( void *  addr)

Wakes up all thread on an address.

Wakes up all threads sleeping on the specified address (if any). Any thread sleeping within a call to vlc_atomic_wait() or vlc_atomic_timedwait() with the specified address as first call parameter will be woken up.

addraddress identifying which threads to wake up

◆ vlc_atomic_notify_one()

void vlc_atomic_notify_one ( void *  addr)

Wakes up one thread on an address.

Wakes up (at least) one of the thread sleeping on the specified address. The address must be equal to the first parameter given by at least one thread sleeping within the vlc_atomic_wait() or vlc_atomic_timedwait() functions. If no threads are found, this function does nothing.

addraddress identifying which threads may be woken up

◆ vlc_atomic_timedwait()

int vlc_atomic_timedwait ( void *  addr,
unsigned  val,
vlc_tick_t  deadline 

Waits on an address with a time-out.

This function operates as vlc_atomic_wait() but provides an additional time-out. If the deadline is reached, the thread resumes and the function returns.

addraddress to check for
valvalue to match at the address
deadlinedeadline to wait until
Return values
0the function was woken up before the time-out
ETIMEDOUTthe deadline was reached

References MS_FROM_VLC_TICK, unlikely, and vlc_tick_now().

◆ vlc_atomic_timedwait_daytime()

int vlc_atomic_timedwait_daytime ( void *  addr,
unsigned  val,
time_t  deadline 

References unlikely.

◆ vlc_atomic_wait()

void vlc_atomic_wait ( void *  addr,
unsigned  val 

Waits on an address.

Puts the calling thread to sleep if a specific unsigned 32-bits value is stored at a specified address. The thread will sleep until it is woken up by a call to vlc_atomic_notify_one() or vlc_atomic_notify_all() in another thread, or spuriously.

If the value does not match, do nothing and return immediately.

addraddress to check for
valvalue to match at the address

◆ vlc_cancel_self()

static void CALLBACK vlc_cancel_self ( ULONG_PTR  self)

◆ vlc_docancel()

static _Noreturn void vlc_docancel ( struct vlc_thread th)

◆ vlc_entry()

static unsigned __stdcall vlc_entry ( void *  p)

◆ vlc_threads_setup()

void vlc_threads_setup ( libvlc_int_t vlc)

◆ vlc_threadvars_cleanup()

static void vlc_threadvars_cleanup ( void  )

Variable Documentation

◆ [union]

union { ... } clk

Referenced by mdate_perf(), and SelectClockSource().

◆ current_thread_ctx

thread_local struct vlc_thread* current_thread_ctx = NULL

◆ freq


Referenced by rtp_queue(), and vlc_tick_now().

◆ mdate_selected

vlc_tick_t(* mdate_selected) (void) ( void  ) = mdate_wall

Referenced by SelectClockSource(), and vlc_tick_now().



Referenced by GetFolderName().

◆ [struct]

struct { ... } perf

◆ super_lock


◆ vlc_threadvar_last

struct vlc_threadvar * vlc_threadvar_last = NULL