NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | ATTRIBUTES | SEE ALSO
cc [ flag ... ] file ... -lthread_db [ library ... ] #include <proc_service.h> #include <thread_db.h>td_err_e td_sync_get_info(const td_synchandle_t *sh_p, td_syncinfo_t *si_p);
Synchronization objects include mutexes, condition variables, semaphores, and reader-writer locks. In the same way that thread operations use a thread handle of type td_thrhandle_t , operations on synchronization objects use a synchronization object handle of type td_synchandle_t .
The controlling process obtains synchronization object handles either by calling the function td_ta_sync_iter() to obtain handles for all synchronization objects of the target process that are known to the libthread_db library of interfaces, or by mapping the address of a synchronization object in the address space of the target process to a handle by calling td_ta_map_addr2sync ().
Note that not all synchronization objects that a process uses may be known to the libthread_db library and returned by td_ta_sync_iter . A synchronization object is known to libthread_db only if it was ever waited on after libthread_db was attached to the process. For example, a mutex may have been widely used, but if no thread ever blocked waiting to acquire it, it will not be known to libthread_db interfaces.
The td_sync_get_info() function fills in the td_syncinfo_t structure * si_p with values for the synchronization object identified by sh_p . The td_syncinfo_t structure contains the following fields:
The internal process handle identifying the target process through which this synchronization object handle was obtained. Synchronization objects may be process-private or process-shared. In the latter case, the same synchronization object may have multiple handles, one for each target process's "view" of the synchronization object.
The address of the synchronization object in this target process's address space.
The type of the synchronization variable: mutex, condition variable, semaphore, or reader-writer lock.
USYNC_THREAD if this synchronization object is process-private; USYNC_PROCESS if it is process-shared.
Flags dependent on the type of the synchronization object.
Semaphores only. The current value of the semaphore
Reader-writer locks only. The number of readers currently holding the lock, or -1 , if a writer is currently holding the lock.
For mutexes only. Non-zero if and only if the mutex is currently locked.
The size of the synchronization object.
Non-zero if and only if at least one thread is blocked on this synchronization object.
For reader-writer locks only. The value is non-zero if and only if this lock is held by a writer.
Mutexes and reader-writer locks only. This is the thread holding the mutex, or the write lock, if this is a reader-writer lock. The value is NULL if no one holds the mutex or write-lock.
A pointer to optional data associated with the synchronization object. Currently useful only for debugging libthread() interfaces.
td_sync_setstate modifies the state of synchronization object si_p , depending on the synchronization object type. For mutexes, td_sync_setstate is unlocked if the value is 0 . Otherwise it is locked. For semaphores, the semaphore's count is set to the value. For reader-writer locks, the reader count set to the value if value is >0 . The count is set to write-locked if value is -1 . It is set to unlocked if the value is 0 . Setting the state of a synchronization object from a libthread_db interface may cause the synchronization object's semantics to be violated from the point of view of the threads in the target process. For example, if a thread holds a mutex, and td_sync_setstate is used to set the mutex to unlocked, then a different thread will also be able to subsequently acquire the same mutex.
td_sync_waiters iterates over the set of thread handles of threads blocked on sh_p . The callback function cb is called once for each such thread handle, and is passed the thread handle and cb_data_p . If the callback function returns a non-zero value, iteration is terminated early. See also td_ta_thr_iter(3THR) .
The call returned successfully.
An invalid thread handle was passed in.
A call to one of the imported interface routines failed.
A libthread_db-internal error occurred.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
MT Level | Safe |
libthread_db(3THR) , td_ta_map_addr2sync(3THR) , td_ta_sync_iter(3THR) , td_ta_thr_iter(3THR) , libthread_db(3LIB) , attributes(5)
NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | ATTRIBUTES | SEE ALSO