EXCEPTION(2)                                         EXCEPTION(2)

     NAME
          exception - 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 exception-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 exception 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 further.  Setexcmode
          changes the way that the system handles exceptions for the
          current process and those it later spawns.  A mode of
          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 excep-
          tion.)  A mode of 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 recov-
          ery (ie, within each process).

     SOURCE
          /appl/lib/exception.b

     DIAGNOSTICS
          Both functions return -1 on error and set the system error

     Page 1                       Plan 9             (printed 10/2/22)

     EXCEPTION(2)                                         EXCEPTION(2)

          string.

     SEE ALSO
          prog(3)

     Page 2                       Plan 9             (printed 10/2/22)