[M3devel] SEGV mapping to RuntimeError

Mika Nystrom mika at async.caltech.edu
Sat Feb 19 19:29:30 CET 2011


Dear m3devel,

For a while it has annoyed me that segmentation violations cause an
unconditional program abort.  I've changed that now so that (under user
threads at least) we instead get a RuntimeError.  Here's an example of
the mechanism at work in an interactive Scheme environment.  Consider
the unhelpful interface and module Crash:

INTERFACE Crash; PROCEDURE Me(); END Crash.

MODULE Crash;

PROCEDURE Me() =
  VAR ptr : REF INTEGER := NIL; BEGIN
    ptr^ := 0
  END Me;

BEGIN END Crash.

Here's an example of what happens if you now call this from an interactive
interpreter that catches the exception RuntimeError.E:

M-Scheme Experimental
LITHP ITH LITHENING.
> (require-modules "m3")
#t
> (Crash.Me)
EXCEPTION! RuntimeError! Attempt to reference an illegal memory location.
> (+ 3 4)          
7
> 

I just realized I may have broken pthreads, let me go back and double-check it.  
runtime/POSIX and thread/POSIX don't refer to the same thing do they...

    Mika




More information about the M3devel mailing list