PipeWire  0.3.36
PipeWire Threaded Loop Object

The threaded loop object runs a PipeWire Loop in a separate thread and ensures proper locking is done. More...

Data Structures

struct  pw_thread_loop_events
 Thread loop events. More...
 

Functions

struct pw_thread_loop * pw_thread_loop_new (const char *name, const struct spa_dict *props)
 Make a new thread loop with the given name and optional properties. More...
 
struct pw_thread_loop * pw_thread_loop_new_full (struct pw_loop *loop, const char *name, const struct spa_dict *props)
 Make a new thread loop with the given loop, name and optional properties. More...
 
void pw_thread_loop_destroy (struct pw_thread_loop *loop)
 Destroy a thread loop. More...
 
void pw_thread_loop_add_listener (struct pw_thread_loop *loop, struct spa_hook *listener, const struct pw_thread_loop_events *events, void *data)
 Add an event listener. More...
 
struct pw_looppw_thread_loop_get_loop (struct pw_thread_loop *loop)
 Get the loop implementation of the thread loop. More...
 
int pw_thread_loop_start (struct pw_thread_loop *loop)
 Start the thread loop. More...
 
void pw_thread_loop_stop (struct pw_thread_loop *loop)
 Stop the thread loop. More...
 
void pw_thread_loop_lock (struct pw_thread_loop *loop)
 Lock the loop. More...
 
void pw_thread_loop_unlock (struct pw_thread_loop *loop)
 Unlock the loop. More...
 
void pw_thread_loop_wait (struct pw_thread_loop *loop)
 Release the lock and wait until some thread calls pw_thread_loop_signal. More...
 
int pw_thread_loop_timed_wait (struct pw_thread_loop *loop, int wait_max_sec)
 Release the lock and wait a maximum of 'wait_max_sec' seconds until some thread calls pw_thread_loop_signal or time out. More...
 
int pw_thread_loop_get_time (struct pw_thread_loop *loop, struct timespec *abstime, int64_t timeout)
 Get a struct timespec suitable for pw_thread_loop_timed_wait_full. More...
 
int pw_thread_loop_timed_wait_full (struct pw_thread_loop *loop, struct timespec *abstime)
 Release the lock and wait up to abstime until some thread calls pw_thread_loop_signal. More...
 
void pw_thread_loop_signal (struct pw_thread_loop *loop, bool wait_for_accept)
 Signal all threads waiting with pw_thread_loop_wait. More...
 
void pw_thread_loop_accept (struct pw_thread_loop *loop)
 Signal all threads executing pw_thread_loop_signal with wait_for_accept. More...
 
bool pw_thread_loop_in_thread (struct pw_thread_loop *loop)
 Check if inside the thread. More...
 

Detailed Description

The threaded loop object runs a PipeWire Loop in a separate thread and ensures proper locking is done.

All of the loop callbacks will be executed with the loop lock held.

See also Threaded Loop

Function Documentation

◆ pw_thread_loop_accept()

void pw_thread_loop_accept ( struct pw_thread_loop *  loop)

Signal all threads executing pw_thread_loop_signal with wait_for_accept.

Signal all threads executing pw_thread_loop_signal with wait_for_accept.

Parameters
loopa PipeWire Threaded Loop Object to signal

◆ pw_thread_loop_add_listener()

void pw_thread_loop_add_listener ( struct pw_thread_loop *  loop,
struct spa_hook listener,
const struct pw_thread_loop_events events,
void *  data 
)

Add an event listener.

References spa_hook_list_append().

◆ pw_thread_loop_destroy()

void pw_thread_loop_destroy ( struct pw_thread_loop *  loop)

◆ pw_thread_loop_get_loop()

struct pw_loop* pw_thread_loop_get_loop ( struct pw_thread_loop *  loop)

Get the loop implementation of the thread loop.

References pw_loop::loop.

◆ pw_thread_loop_get_time()

int pw_thread_loop_get_time ( struct pw_thread_loop *  loop,
struct timespec *  abstime,
int64_t  timeout 
)

Get a struct timespec suitable for pw_thread_loop_timed_wait_full.

Since: 0.3.7

Get a struct timespec suitable for pw_thread_loop_timed_wait_full.

This can be used in pw_thread_loop_timed_wait_full().

Parameters
loopa PipeWire Threaded Loop Object
abstimethe result struct timesspec
timeoutthe time in nanoseconds to add to tp
Returns
0 on success or a negative errno value on error.

References SPA_NSEC_PER_SEC.

Referenced by pw_thread_loop_timed_wait().

◆ pw_thread_loop_in_thread()

bool pw_thread_loop_in_thread ( struct pw_thread_loop *  loop)

Check if inside the thread.

Check if inside the thread.

Parameters
loopa PipeWire Threaded Loop Object to signal
Returns
true when called inside the thread of loop.

◆ pw_thread_loop_lock()

void pw_thread_loop_lock ( struct pw_thread_loop *  loop)

Lock the loop.

This ensures exclusive ownership of the loop

Lock the loop.

Parameters
loopa PipeWire Threaded Loop Object

References NAME, and pw_log_trace.

◆ pw_thread_loop_new()

struct pw_thread_loop* pw_thread_loop_new ( const char *  name,
const struct spa_dict props 
)

Make a new thread loop with the given name and optional properties.

Make a new thread loop with the given name and optional properties.

Parameters
namethe name of the thread or NULL
propsa dict of properties for the thread loop
Returns
a newly allocated PipeWire Threaded Loop Object

Make a new PipeWire Threaded Loop Object that will run in a thread with name.

After this function you should probably call pw_thread_loop_start() to actually start the thread

◆ pw_thread_loop_new_full()

struct pw_thread_loop* pw_thread_loop_new_full ( struct pw_loop loop,
const char *  name,
const struct spa_dict props 
)

Make a new thread loop with the given loop, name and optional properties.

When loop is NULL, a new loop will be created.

Make a new thread loop with the given loop, name and optional properties.

Parameters
loopthe loop to wrap
namethe name of the thread or NULL
propsa dict of properties for the thread loop
Returns
a newly allocated PipeWire Threaded Loop Object

Make a new PipeWire Threaded Loop Object that will run loop in a thread with name.

After this function you should probably call pw_thread_loop_start() to actually start the thread

◆ pw_thread_loop_signal()

void pw_thread_loop_signal ( struct pw_thread_loop *  loop,
bool  wait_for_accept 
)

Signal all threads waiting with pw_thread_loop_wait.

Signal all threads waiting with pw_thread_loop_wait.

Parameters
loopa PipeWire Threaded Loop Object to signal
wait_for_acceptif we need to wait for accept

Signal the thread of loop. If wait_for_accept is true, this function waits until pw_thread_loop_accept() is called.

References NAME, and pw_log_trace.

◆ pw_thread_loop_start()

int pw_thread_loop_start ( struct pw_thread_loop *  loop)

Start the thread loop.

Start the thread loop.

Parameters
loopa PipeWire Threaded Loop Object
Returns
0 on success

◆ pw_thread_loop_stop()

void pw_thread_loop_stop ( struct pw_thread_loop *  loop)

Stop the thread loop.

Stop the thread loop.

Parameters
loopa PipeWire Threaded Loop Object

References NAME, pw_log_debug, and pw_loop_signal_event.

Referenced by pw_thread_loop_destroy().

◆ pw_thread_loop_timed_wait()

int pw_thread_loop_timed_wait ( struct pw_thread_loop *  loop,
int  wait_max_sec 
)

Release the lock and wait a maximum of 'wait_max_sec' seconds until some thread calls pw_thread_loop_signal or time out.

Release the lock and wait a maximum of 'wait_max_sec' seconds until some thread calls pw_thread_loop_signal or time out.

Parameters
loopa PipeWire Threaded Loop Object to signal
wait_max_secthe maximum number of seconds to wait for a pw_thread_loop_signal()
Returns
0 on success or ETIMEDOUT on timeout or a negative errno value.

References pw_thread_loop_get_time(), pw_thread_loop_timed_wait_full(), and SPA_NSEC_PER_SEC.

◆ pw_thread_loop_timed_wait_full()

int pw_thread_loop_timed_wait_full ( struct pw_thread_loop *  loop,
struct timespec *  abstime 
)

Release the lock and wait up to abstime until some thread calls pw_thread_loop_signal.

Use pw_thread_loop_get_time to make a timeout. Since: 0.3.7

Release the lock and wait up to abstime until some thread calls pw_thread_loop_signal.

Parameters
loopa PipeWire Threaded Loop Object to signal
abstimethe absolute time to wait for a pw_thread_loop_signal()
Returns
0 on success or -ETIMEDOUT on timeout or a negative error value

Referenced by pw_thread_loop_timed_wait().

◆ pw_thread_loop_unlock()

void pw_thread_loop_unlock ( struct pw_thread_loop *  loop)

Unlock the loop.

Unlock the loop.

Parameters
loopa PipeWire Threaded Loop Object

References NAME, and pw_log_trace.

◆ pw_thread_loop_wait()

void pw_thread_loop_wait ( struct pw_thread_loop *  loop)

Release the lock and wait until some thread calls pw_thread_loop_signal.

Release the lock and wait until some thread calls pw_thread_loop_signal.

Parameters
loopa PipeWire Threaded Loop Object to signal

References NAME, and pw_log_trace.