.TH NOTIFY 3
.SH NAME
notify, noted, atnotify, noteenable, notedisable, notifyon, notifyoff \- handle asynchronous process notification
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.PP
.B
int notify(void (*f)(void*, char*))
.PP
.B
int noted(int v)
.PP
.B
int atnotify(int (*f)(void*, char*), int in)
.PP
.B
int noteenable(char *msg)
.br
.B
int notedisable(char *msg)
.PP
.B
int notifyon(char *msg)
.br
.B
int notifyoff(char *msg)
.SH DESCRIPTION
When a process raises an exceptional condition such as dividing by zero
or writing on a closed pipe, a
.I note
is posted to communicate the exception.
A note may also be posted by another process
via
.IR postnote (3).
On Unix, notes are implemented as signals.
.PP
When a note is received, the action taken depends on the note.
See
.IR signal (7)
for the full description of the defaults.
.PP
The default actions may be overridden.
The
.I notify
function registers a
.I "notification handler
to be called within the process when a note is received.
The argument to
.I notify
replaces the previous handler, if any.
An argument of zero cancels a previous handler,
restoring the default action.
A
.IR fork (2)
system call leaves the handler registered in
both the parent and the child;
.IR exec (3)
restores the default behavior.
Handlers may not perform floating point operations.
.PP
After a note is posted,
the handler is called with two arguments:
the first is unimplemented and should not be used
(on Plan 9
it is a
.B Ureg
structure
giving the current values of registers);
the second is a pointer to the note itself,
a null-terminated string.
.\" The
.\" .B Ureg
.\" argument is usually not needed; it is provided to help recover from traps such
.\" as floating point exceptions.
.\" Its use and layout are machine- and system-specific.
.PP
A notification handler must finish either by exiting the program or by calling
.IR noted ;
if the handler returns the behavior
is undefined and probably erroneous.
Until the program calls
.IR noted ,
any further externally-generated notes
(e.g.,
.B hangup
or
.BR alarm )
will be held off, and any further notes generated by
erroneous behavior by the program
(such as divide by zero) will kill the program.
The argument to
.I noted
defines the action to take:
.B NDFLT
instructs the system to perform the default action
as if the handler had never been registered;
.B NCONT
instructs the system to resume the process
at the point it was notified.
In neither case does
.I noted
return to the handler.
If the note interrupted an incomplete system call,
that call returns an error (with error string
.BR interrupted )
after the process resumes.
A notification handler can also jump out to an environment
set up with
.I setjmp
using the
.I notejmp
function (see
.IR setjmp (3)).
.PP
Unix provides a fixed set of notes (typically there are 32) called
.IR signals .
It also allows a process to block certain notes from being delivered
(see
.IR sigprocmask (2))
and to ignore certain notes by setting the signal hander to the special value
.B SIG_IGN
(see
.IR signal (2)).
.I Noteenable
and
.I notedisable
enable or disable receipt of a particular note by changing the current process's blocked signal mask.
Receipt of a disabled note will be postponed until it is reenabled.
.I Notifyon
and
.I notifyoff
enable or disable whether the notification handler
is called upon receipt of the note; if the handler is not called, the note is discarded.
.PP
Regardless of the origin of the note or the presence of a handler,
if the process is being debugged
(see
.IR ptrace (2))
the arrival of a note puts the process in the
.B Stopped
state and awakens the debugger.
.PP
Rather than using the system calls
.I notify
and
.IR noted ,
most programs should use
.I atnotify
to register notification handlers.
The parameter
.I in
is non-zero to register the function
.IR f ,
and zero to cancel registration.
A handler must return a non-zero number
if the note was recognized (and resolved);
otherwise it must return zero.
When the system posts a note to the process,
each handler registered with
.I atnotify
is called with arguments as
described above
until one of the handlers returns non-zero.
Then
.I noted
is called with argument
.BR NCONT .
If no registered function returns non-zero,
.I atnotify
calls
.I noted
with argument
.BR NDFLT .
.\" .PP
.\" .I Noted
.\" has two other possible values for its argument.
.\" .B NSAVE
.\" returns from the handler and clears the note, enabling the receipt of another,
.\" but does not return to the program.
.\" Instead it starts a new handler with the same stack, stack pointer,
.\" and arguments as the
.\" original, at the address recorded in the program counter of the
.\" .B Ureg
.\" structure.  Typically, the program counter will be overridden by the
.\" first note handler to be the address of a separate function;
.\" .B NSAVE
.\" is then a `trampoline' to that handler.
.\" That handler may executed
.\" .B noted(NRSTR)
.\" to return to the original program, usually after restoring the original program
.\" counter.
.\" .B NRSTR
.\" is identical to
.\" .BR NCONT
.\" except that it can only be executed after an
.\" .BR NSAVE .
.\" .B NSAVE
.\" and
.\" .B NRSTR
.\" are designed to improve the emulation of signals by the ANSI C/POSIX
.\" environment; their use elsewhere is discouraged.
.PP
.I Notify
and
.I atnotify
return \-1 on error and 0 on success.
.I Noted
returns \-1 on error; successful calls to
.I noted
do not return.
.I Noteenable
and
.I notedisable
.RI ( notitfyon
and
.IR notifyoff )
return \-1 on error, 0 if the note was previously disabled (not notified),
and 1 if the note was previously enabled (notified).
.PP
The set of notes a process may receive is system-dependent, but there
is a common set that includes:
.PP
.RS 3n
.nf
.ta \w'\fLsys: segmentation violation  \fP'u +\w'process requested to exit     'u
\fINote\fP	\fIMeaning\fP	\fIUnix signal\fP
\fLinterrupt\fP	user interrupt (DEL key)	SIGINTR
\fLhangup\fP	I/O connection closed	SIGHUP
\fLalarm\fP	alarm expired	SIGLARM
\fLquit\fP	quit from keyboard	SIGQUIT
\fLkill\fP	process requested to exit	SIGTERM
\fLsys: kill\fP	process forced to exit	SIGKILL
\fLsys: bus error\fP	bus error	SIGBUS
\fLsys: segmentation violation\fP	segmentation violation	SIGSEGV
\fLsys: write on closed pipe\fP	write on closed pipe	SIGPIPE
\fLsys: child\fP	child wait status change	SIGCHLD
.fi
.RE
.PP
See
.B \*9/src/lib9/await.c
(sic)
for the full list.
.PP
The notes prefixed
.B sys:
are usually generated by the operating system.
.SH SOURCE
.B \*9/src/lib9/notify.c
.br
.B \*9/src/lib9/atnotify.c
.SH SEE ALSO
.IR intro (3),
.I notejmp
in
.IR setjmp (3)
