diff options
Diffstat (limited to 'static/inferno/man2/exception.2')
| -rw-r--r-- | static/inferno/man2/exception.2 | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/static/inferno/man2/exception.2 b/static/inferno/man2/exception.2 new file mode 100644 index 00000000..7a2befee --- /dev/null +++ b/static/inferno/man2/exception.2 @@ -0,0 +1,65 @@ +.TH EXCEPTION 2 +.SH NAME +exception \- obtain data about exceptions and set exception-handling modes +.SH SYNOPSIS +.EX +include "exception.m"; +exc := load Exception Exception->PATH; + +NOTIFYLEADER, PROPAGATE: con iota; + +getexc: fn(pid: int): (int, string, string); +setexcmode: fn(mode: int): int; +.EE +.SH DESCRIPTION +.B Exception +provides functions to fetch data about exceptions in other processes +and change exception-handling modes. +It encapsulates exception-related operations on files in +.IR prog (3). +.PP +When a process incurs an exception, the system saves details before processing the exception, +following Limbo's rules. +.B Getexc +returns a tuple +.BI ( pc,\ module,\ description ) +that describes the most recent exception raised in process +.IR pid . +(A process id of -1 is taken to mean the current process.) +The tuple contains the pc value, the module name, and the exception name. +The value +.B "(0,\ nil,\ nil)" +is returned if no exception has occurred. +.PP +By default, when a process incurs an exception that is not handled — +no +.B exception +clause matches that exception — +the process is stopped in a `Broken' state for debugging, +and the exception does not propagate further. +.B Setexcmode +changes the way that the system handles exceptions for the current process +and those it later spawns. +A +.I mode +of +.BR NOTIFYLEADER +makes the invoking process the leader of the +current process group for exception handling. +Subsequently, an exception in any process in the current process group +will atomically destroy all processes in the group except the leader, +and the exception will be raised in the leader. +(This works even when the leader itself incurs the exception.) +A +.I mode +of +.B PROPAGATE +instead causes an exception in any process in the group to be raised in +all processes in the group, allowing them all to initiate local error recovery +(ie, within each process). +.SH SOURCE +.B /appl/lib/exception.b +.SH DIAGNOSTICS +Both functions return -1 on error and set the system error string. +.SH SEE ALSO +.IR prog (3) |
