NAME
_signotifywait, _lwp_sigredirect - deliver process signals
to specific LWPs
SYNOPSIS
#include <sys/lwp.h>
int _signotifywait(void);
int _lwp_sigredirect(lwpid_t target_lwp, int signo , int
*queued);
DESCRIPTION
In a multithreaded process, signals that are generated for a
process are delivered to one of the threads that does not
have that signal masked. If all of the application threads
are masking that signal, its delivery waits until one of
them unmasks it.
The disposition of the each thread's signal mask is unknown
to the kernel when it generates signals for the process. The
_signotifywait() and _lwp_sigredirect() functions provide a
mechanism to direct instances of signals generated for the
process to application-specified LWPs. Each process has a
set of signals pending for the process, and for each LWP
there is a set of signals pending for that LWP. If no sig-
nals are pending, these sets are empty.
There is also a process-wide signal set, termed the notifi-
cation set, manipulated by these functions. A signal gen-
erated for the process where the signal number is not in the
notification set is called an unnotified signal.
In a multithreaded program there is an aslwp, a special LWP
endowed with powers to handle signals that are generated for
a process. The _signotifywait() function is used to await
signals generated for the process, and should be called only
from the aslwp. In general, these functions are not to be
called from the application-level.
If there is a pending unnotified signal when _signo-
tifywait() is called, that signal is selected and the call
returns immediately. If there is not a signal pending, the
call suspends the calling LWP until the generation of an
unnotified signal; that signal then is selected and the
function returns. In both cases, the selected signal number
is set in the notification set and returned as the value of
_signotifywait(). The signal remains pending for the pro-
cess, and any associated siginfo(3HEAD) information remains
queued at the process.
The _lwp_sigredirect() function requests that a signal pend-
ing for the process be delivered to the LWP specified by
target_lwp. If target_lwp is 0, the signal is discarded.
It is an error if signo is not currently in the notification
set of the process. The signal specified by signo is removed
from pending for the process and is made pending for the
target_lwp. If there is an associated siginfo information
structure queued at the process, that siginfo is queued to
the target_lwp.
Whenever a signal is cleared from the set of signals pending
for the process, the corresponding signal is cleared from
the notification set. After a successful call to
_lwp_sigredirect(), the signal signo is cleared from the
notification set and from the set of signals pending for the
process. If another instance of signo is queued for the pro-
cess, the signal number is again set in the process pending
mask, and if another LWP is blocked in a call to _signo-
tifywait(), its wait for an unnotified signal will be satis-
fied. The effects described in this paragraph also apply
when the signal signo is returned by a call to
sigtimedwait() and signo was not pending for the calling
LWP.
When queued is non-NULL, and there is another instance of
the signal (signo), a non-zero value will be place in queued
to indicate that more than one instance of the signal is
pending on the process.
RETURN VALUES
The _signotifywait() function returns the signal number of
the pending but hitherto unnotified signal. The
_lwp_sigredirect() function returns 0 when successful. A
non-zero value indicates an error.
ERRORS
No error conditions are specified for _signotifywait().
If the following conditions occurs, _lwp_sigredirect() fails
and return the corresponding value:
EINVAL
The signal signo was not pending for the process, or
signo was not in the notification set.
ESRCH The target_lwp cannot be found in the current process.
SEE ALSO
_lwp_create(2), _lwp_kill(2), sigtimedwait(3RT),
siginfo(3HEAD), signal(3HEAD)
NOTES
This mechanism for delivering signals to multithreaded
processes is subject to change in future versions of
Solaris. Any process with explicit knowledge of this
mechanism may not be compatible from release to release.
|
Закладки на сайте Проследить за страницей |
Created 1996-2025 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |