Guardian Procedure Calls Reference Manual
If SIGACTION_SUPPLANT_ returns an error, the signal-handling state is not changed.
• All signals, except those for which you cannot install a handler, are blocked.
Deferrable signals that occur while the process is executing privileged code are deferred until
the process exits privileged execution mode. If these signals are not blocked, they are then
delivered to the handler, which is activated at the tip of the main stack.
Nondeferrable signals are immediately delivered to the specified handler. The handler executes
on the main stack or privileged stack of the calling process depending on whether the signal
occurs in nonprivileged code or privileged code and on whether the signal handler for that
signal is installed by a nonprivileged caller or privileged caller of SIGACTION_SUPPLANT_
as follows:
Then the specified handler is activated at...And the signal handler for that signal
was installed by...
If a nondeferrable
signal occurs in...
the tip of the main stack (when the signal was
generated)
a nonprivileged or privileged caller
of SIGACTION_SUPPLANT_
nonprivileged code
the tip of the main stack (when the process
entered privileged mode)
a nonprivileged caller of
SIGACTION_SUPPLANT_
privileged code
the tip of the privileged stacka privileged caller of
SIGACTION_SUPPLANT_
privileged code
• Nested signals
Signals can be nested. If a different signal occurs during execution of a signal handler—or
any procedure called directly or indirectly from the signal handler—the handler for that signal
is invoked at the current tip of the stack.
NOTE: This action differs from the corresponding action on a TNS Guardian process; a trap
that occurs during execution of a trap handler is fatal to the process.
• Signal mask
SIGACTION_SUPPLANT_ sets the signal mask to block all signals from delivery. All signals
that can be deferred are kept pending. Any nondeferrable signal is delivered to the handler.
NOTE: This response to a nondeferrable signal is an extension to the POSIX.1 standard;
according to the POSIX.1 standard, the response to a nondeferrable signal is undefined. This
response also differs from the OSS implementation, which abnormally terminates the process
if a nondeferrable signal is blocked.
Example
SIGSAVE_DEF ( buffer );
error := SIGACTION_SUPPLANT_ ( handler, buffer, length );
IF error <> 0 THEN
errnoval := ERRNO_GET_;
Related Programming Manual
For programming information about the SIGACTION_SUPPLANT_ procedure, see the Guardian
Programmer's Guide.
1370 Guardian Procedure Calls (S)