EXCEPTION(2)EXCEPTION(2)NAMEexception - obtain data about exceptions and set exception-handling
modes
SYNOPSIS
include "exception.m";
exc := load Exception Exception->PATH;
NOTIFYLEADER, PROPAGATE: con iota;
getexc: fn(pid: int): (int, string, string);
setexcmode: fn(mode: int): int;
DESCRIPTION
Exception provides functions to fetch data about exceptions in other
processes and change exception-handling modes. It encapsulates excep‐
tion-related operations on files in prog(3).
When a process incurs an exception, the system saves details before
processing the exception, following Limbo's rules. Getexc returns a
tuple (pc, module, description) that describes the most recent excep‐
tion raised in process 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 (0, nil, nil) is returned if no
exception has occurred.
By default, when a process incurs an exception that is not handled — no
exception clause matches that exception — the process is stopped in a
`Broken' state for debugging, and the exception does not propagate fur‐
ther. Setexcmode changes the way that the system handles exceptions
for the current process and those it later spawns. A mode of NOTI‐
FYLEADER 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 pro‐
cesses 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 mode of PROPAGATE instead causes an exception in any
process in the group to be raised in all processes in the group, allow‐
ing them all to initiate local error recovery (ie, within each
process).
SOURCE
/appl/lib/exception.b
DIAGNOSTICS
Both functions return -1 on error and set the system error string.
SEE ALSOprog(3)EXCEPTION(2)