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

Data Structures

struct  vlc_thread
struct  vlc_threadvar

Macros

#define _DECL_DLLMAIN
#define NTDDI_WIN10_RS1   0x0A000002
#define LOOKUP(s)

Typedefs

typedef HRESULT(WINAPI * SetThreadDescription_ptr) (HANDLE, PCWSTR)

Functions

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)
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.
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 ThreadEntry (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)

Variables

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

Macro Definition Documentation

◆ _DECL_DLLMAIN

#define _DECL_DLLMAIN

◆ LOOKUP

#define LOOKUP ( s)
Value:
(((s##_) = (s##_ptr)GetProcAddress(h, #s)) != NULL)
#define _(str)
Definition vlc_fixups.h:452

Referenced by DllMain().

◆ NTDDI_WIN10_RS1

#define NTDDI_WIN10_RS1   0x0A000002

Typedef Documentation

◆ SetThreadDescription_ptr

typedef HRESULT(WINAPI * SetThreadDescription_ptr) (HANDLE, PCWSTR)

Function Documentation

◆ DllMain()

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

◆ mdate_perf()

vlc_tick_t mdate_perf ( void )
static

References clk, unlikely, and vlc_tick_from_frac().

Referenced by SelectClockSource().

◆ mdate_perf_100ns()

vlc_tick_t mdate_perf_100ns ( void )
static

References unlikely, and VLC_TICK_FROM_MSFTIME.

Referenced by SelectClockSource().

◆ mdate_wall()

vlc_tick_t mdate_wall ( void )
static

◆ SelectClockSource()

void SelectClockSource ( libvlc_int_t * obj)
static

◆ ThreadEntry()

unsigned __stdcall ThreadEntry ( void * p)
static

◆ 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.

Parameters
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.

Parameters
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.

Parameters
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_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.

Parameters
addraddress to check for
valvalue to match at the address

◆ vlc_cancel_self()

void CALLBACK vlc_cancel_self ( ULONG_PTR self)
static

◆ vlc_docancel()

_Noreturn void vlc_docancel ( struct vlc_thread * th)
static

◆ vlc_threads_setup()

void vlc_threads_setup ( libvlc_int_t * vlc)

◆ vlc_threadvars_cleanup()

void vlc_threadvars_cleanup ( void )
static

Variable Documentation

◆ [union]

union { ... } clk

Referenced by mdate_perf(), and SelectClockSource().

◆ current_thread_ctx

struct vlc_thread* current_thread_ctx = NULL
static

◆ freq

LARGE_INTEGER freq

Referenced by rtp_queue(), and vlc_tick_now().

◆ mdate_selected

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

Referenced by SelectClockSource(), and vlc_tick_now().

◆ [struct]

struct { ... } perf

◆ SetThreadDescription_

SetThreadDescription_ptr SetThreadDescription_
static

Referenced by DllMain(), and vlc_thread_set_name().

◆ super_lock

SRWLOCK super_lock = SRWLOCK_INIT
static

◆ vlc_threadvar_last

struct vlc_threadvar * vlc_threadvar_last = NULL