#include "pa_cpuload.h"
#include <assert.h>
#include <pthread.h>
#include <signal.h>
Go to the source code of this file.
#define PA_ASSERT_CALL | ( | expr, | |||
success | ) |
Value:
paUtilErr_ = (expr); \ assert( success == paUtilErr_ );
#define PA_ENSURE | ( | expr | ) |
Value:
do { \ if( UNLIKELY( (paUtilErr_ = (expr)) < paNoError ) ) \ { \ PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ result = paUtilErr_; \ goto error; \ } \ } while (0);
#define PA_ENSURE_SYSTEM | ( | expr, | |||
success | ) |
Value:
do { \ if( UNLIKELY( (paUtilErr_ = (expr)) != success ) ) \ { \ /* PaUtil_SetLastHostErrorInfo should only be used in the main thread */ \ if( pthread_equal(pthread_self(), paUnixMainThread) ) \ { \ PaUtil_SetLastHostErrorInfo( paALSA, paUtilErr_, strerror( paUtilErr_ ) ); \ } \ PaUtil_DebugPrint( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" ); \ result = paUnanticipatedHostError; \ goto error; \ } \ } while( 0 );
#define PA_MAX | ( | x, | |||
y | ) | ( (x) > (y) ? (x) : (y) ) |
#define PA_MIN | ( | x, | |||
y | ) | ( (x) < (y) ? (x) : (y) ) |
#define PA_UNLESS | ( | expr, | |||
code | ) |
Value:
do { \ if( UNLIKELY( (expr) == 0 ) ) \ { \ PaUtil_DebugPrint(( "Expression '" #expr "' failed in '" __FILE__ "', line: " STRINGIZE( __LINE__ ) "\n" )); \ result = (code); \ goto error; \ } \ } while (0);
#define PaUnixThreading_EXIT | ( | result | ) |
Value:
do { \ PaError* pres = NULL; \ if( paNoError != (result) ) \ { \ pres = malloc( sizeof (PaError) ); \ *pres = (result); \ } \ pthread_exit( pres ); \ } while (0);
A thin wrapper around pthread_exit, will automatically pass on any error code to the joining thread. If the result indicates an error, i.e. it is not equal to paNoError, this function will automatically allocate a pointer so the error is passed on with pthread_exit. If the result indicates that all is well however, only a NULL pointer will be handed to pthread_exit. Thus, the joining thread should check whether a non-NULL result pointer is obtained from pthread_join and make sure to free it.
result,: | The error code to pass on to the joining thread. |
#define STRINGIZE | ( | expr | ) | STRINGIZE_HELPER(expr) |
#define STRINGIZE_HELPER | ( | expr | ) | #expr |
#define UNLIKELY | ( | expr | ) | (expr) |
PaError PaUnixMutex_Initialize | ( | PaUnixMutex * | self | ) |
PaError PaUnixMutex_Lock | ( | PaUnixMutex * | self | ) |
Lock mutex.
We're disabling thread cancellation while the thread is holding a lock, so mutexes are properly unlocked at termination time.
PaError PaUnixMutex_Terminate | ( | PaUnixMutex * | self | ) |
PaError PaUnixMutex_Unlock | ( | PaUnixMutex * | self | ) |
Unlock mutex.
Thread cancellation is enabled again after the mutex is properly unlocked.
PaError PaUnixThread_New | ( | PaUnixThread * | self, | |
void *(*)(void *) | threadFunc, | |||
void * | threadArg, | |||
PaTime | waitForChild | |||
) |
Spawn a thread.
Intended for spawning the callback thread from the main thread. This function can even block (for a certain time or indefinitely) untill notified by the callback thread (using PaUnixThread_NotifyParent), which can be useful in order to make sure that callback has commenced before returning from Pa_StartStream.
threadFunc,: | The function to be executed in the child thread. | |
waitForChild,: | If not 0, wait for child thread to call PaUnixThread_NotifyParent. Less than 0 means wait for ever, greater than 0 wait for the specified time. |
PaError PaUnixThread_NotifyParent | ( | PaUnixThread * | self | ) |
Notify waiting parent thread.
PaError PaUnixThread_PrepareNotify | ( | PaUnixThread * | self | ) |
Prepare to notify waiting parent thread.
An internal lock must be held before the parent is notified in PaUnixThread_NotifyParent, call this to acquire it beforehand.
int PaUnixThread_StopRequested | ( | PaUnixThread * | self | ) |
Has the parent thread requested this thread to stop?
PaError PaUnixThread_Terminate | ( | PaUnixThread * | self, | |
int | wait, | |||
PaError * | exitResult | |||
) |
Terminate thread.
wait,: | If true, request that background thread stop and wait untill it does, else cancel it. | |
exitResult,: | If non-null this will upon return contain the exit status of the thread. |
PaError PaUnixThreading_Initialize | ( | ) |
Initialize global threading state.
PaError PaUtil_CancelThreading | ( | PaUtilThreading * | threading, | |
int | wait, | |||
PaError * | exitResult | |||
) |
PaError PaUtil_InitializeThreading | ( | PaUtilThreading * | threading | ) |
PaError PaUtil_StartThreading | ( | PaUtilThreading * | threading, | |
void *(*)(void *) | threadRoutine, | |||
void * | data | |||
) |
void PaUtil_TerminateThreading | ( | PaUtilThreading * | threading | ) |
pthread_t paUnixMainThread |