#include <stdapis/dbus-1.0/dbus/dbus-threads.h>
struct DBusThreadFunctions |
Functions that must be implemented to make the D-Bus library thread-aware. The recursive mutex functions should be specified rather than the old, deprecated nonrecursive ones.
The condition variable functions have to work with recursive mutexes if you provide those, or with nonrecursive mutexes if you provide those.
If implementing threads using pthreads, be aware that PTHREAD_MUTEX_RECURSIVE is broken in combination with condition variables. libdbus relies on the Java-style behavior that when waiting on a condition, the recursion count is saved and restored, and the mutex is completely unlocked, not just decremented one level of recursion.
Thus with pthreads you probably have to roll your own emulated recursive mutexes, you can't use PTHREAD_MUTEX_RECURSIVE. This is what dbus_threads_init_default() does on platforms that use pthreads.
DBusCondVarWaitTimeoutFunction | condvar_wait_timeout |
Function to wait on a condition with a timeout
DBusCondVarWakeAllFunction | condvar_wake_all |
Function to wake all threads waiting on the condition
DBusCondVarWakeOneFunction | condvar_wake_one |
Function to wake one thread waiting on the condition
DBusMutexUnlockFunction | mutex_unlock |
Function to unlock a mutex; optional and deprecated.
DBusRecursiveMutexFreeFunction | recursive_mutex_free |
Function to free a recursive mutex
DBusRecursiveMutexLockFunction | recursive_mutex_lock |
Function to lock a recursive mutex
DBusRecursiveMutexNewFunction | recursive_mutex_new |
Function to create a recursive mutex
DBusRecursiveMutexUnlockFunction | recursive_mutex_unlock |
Function to unlock a recursive mutex