libtransistor
A userland library for the Nintendo Switch
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
Typedefs | Functions
waiter.h File Reference

Manager for waiting on synchronizable handles. More...

#include <libtransistor/types.h>
Include dependency graph for waiter.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef struct waiter_t waiter_t
 
typedef struct wait_record_t wait_record_t
 

Functions

waiter_t * waiter_create ()
 Creates a new waiter object.
 
wait_record_t * waiter_add (waiter_t *waiter, handle_t handle, bool(*callback)(void *data, handle_t handle), void *data)
 Adds a handle to wait on to the waiter. More...
 
wait_record_t * waiter_add_deadline (waiter_t *waiter, uint64_t deadline, uint64_t(*callback)(void *data), void *data)
 Adds a timed callback to the waiter. More...
 
wait_record_t * waiter_add_signal (waiter_t *waiter, bool(*callback)(void *data), void *data)
 Adds a callback to the waiter that is signalled from another thread. More...
 
void waiter_signal (waiter_t *waiter, wait_record_t *record)
 Marks the callback represented by this record to be called, and interrupts the waiter. More...
 
void waiter_reset_signal (waiter_t *waiter, wait_record_t *record)
 Resets the signal marked by waiter_signal. More...
 
result_t waiter_wait (waiter_t *waiter, uint64_t timeout)
 Waits for handles to signal.
 
void waiter_cancel (waiter_t *waiter, wait_record_t *record)
 Removes a record from the waiter, interrupting it. More...
 
void waiter_destroy (waiter_t *waiter)
 Destroys a waiter. More...
 

Detailed Description

Manager for waiting on synchronizable handles.

Function Documentation

wait_record_t* waiter_add ( waiter_t *  waiter,
handle_t  handle,
bool(*)(void *data, handle_t handle)  callback,
void *  data 
)

Adds a handle to wait on to the waiter.

Parameters
waiterWaiter to add callback to
handleHandle to wait on
callbackCallback for when handle is signalled. Return true to keep the handle registered, false to unregister it.
dataUserdata passed to callback
Returns
A wait_record_t valid on success, NULL on failure.
wait_record_t* waiter_add_deadline ( waiter_t *  waiter,
uint64_t  deadline,
uint64_t(*)(void *data)  callback,
void *  data 
)

Adds a timed callback to the waiter.

Parameters
waiterWaiter to add callback to
deadlineTarget time to run callback, in system ticks.
callbackCallback for when deadline is hit. Return zero to unregister, or return a positive value to set another deadline.
dataUserdata passed to callback
Returns
A wait_record_t valid on success, NULL on failure.
wait_record_t* waiter_add_signal ( waiter_t *  waiter,
bool(*)(void *data)  callback,
void *  data 
)

Adds a callback to the waiter that is signalled from another thread.

Parameters
waiterWaiter to add callback to
callbackCallback for when record is signalled. Return true to stay registered, or false to unregister.
dataUserdata passed to callback

Use waiter_signal from another thread, and call waiter_reset_signal from within the callback.

void waiter_cancel ( waiter_t *  waiter,
wait_record_t *  record 
)

Removes a record from the waiter, interrupting it.

This function may only be called once on any particular wait record.

void waiter_destroy ( waiter_t *  waiter)

Destroys a waiter.

All wait records should be cancelled before calling this function.

void waiter_reset_signal ( waiter_t *  waiter,
wait_record_t *  record 
)

Resets the signal marked by waiter_signal.

Parameters
recordRecord to rest signal

It is invalid to call this function on a record not returned from waiter_add_signal.

void waiter_signal ( waiter_t *  waiter,
wait_record_t *  record 
)

Marks the callback represented by this record to be called, and interrupts the waiter.

Parameters
recordRecord to signal

It is invalid to call this function on a record not returned from waiter_add_signal.