Attach an event to a mutex
Synopsis:
#include <sys/neutrino.h>
int SyncMutexEvent( sync_t * sync,
struct sigevent * event );
int SyncMutexEvent_r( sync_t * sync,
struct sigevent * event );
Arguments:
- sync
- A pointer to the synchronization object for the mutex that you want
to attach an event to.
- event
- A pointer to the
sigevent
structure that describes the event that you want to attach, or
NULL if you want to detach the currently registered event.
Library:
libc
Use the -l c option to
qcc
to link against this library.
This library is usually included automatically.
Description:
The SyncMutexEvent() is a kernel call that attaches a
specified event to a mutex pointed
to by sync. You use
SyncMutexRevive() to
revive a DEAD mutex. Normally, a mutex will be placed in the DEAD state
when the memory that was used to lock the mutex gets unmapped. One of the
ways this may happen is
when a process dies while holding the mutex in a shared memory.
If you call SyncMutexEvent() with a NULL event,
the function deletes any existing event registration.
SyncMutexEvent() and SyncMutexEvent_r()
are similar, except for the way they indicate errors.
See the Returns section for details.
Note:
In order to use this function with a
SIGEV_PULSE sigevent that's going to a channel
that was created by a different process with a different user ID,
your process must have the
PROCMGR_AID_CONNECTION ability enabled.
For more information, see
procmgr_ability().
Returns:
The only difference between these functions is the way they indicate errors:
- SyncMutexEvent()
- If an error occurs, the function returns -1 and sets
errno.
Any other value returned
indicates success.
- SyncMutexEvent_r()
- Returns EOK on success.
This function does NOT set errno.
If an error occurs, the function returns any value listed in the Errors
section.
Errors:
- EAGAIN
- All kernel synchronization event objects are in use.
- EFAULT
- A fault occurred when the kernel tried to access sync.
- EINVAL
- The synchronization object pointed to by sync doesn't exist.
- EPERM
- The calling process doesn't have the required permission; see
procmgr_ability().
Classification:
QNX Neutrino
Safety: |
|
Cancellation point |
No |
Interrupt handler |
No |
Signal handler |
Yes |
Thread |
Yes |