[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: non-local exits are icky



    > From: Michael Sperber <sperber@xxxxxxxxxxxxxxxxxxxxxxxxxxx>

    > Tom> The SRFI is slightly unclear but I understand the section
    > Tom> "Signalling errors from external code" to mean that a call
    > Tom> to something like SCHEME_ARGUMENT_TYPE_ERROR does not
    > Tom> return to its caller, but rather directly to Scheme.

    > Tom> I gather also that SCHEME_CALL may result in a non-local
    > Tom> exit past the caller.

    > Correct.

    > Tom> Since the mechanism of these non-local exits is not
    > Tom> specified and can not be modified by C code, the FFI
    > Tom> contains no provision for them to perform unwind protection
    > Tom> --- that's a serious omission.

    > But SCHEME_CALL takes you back to Scheme, where you can use
    > DYNAMIC-WIND.

    > I think I misunderstand your point.


A sketch that illustrates the issue:


  my_fn ()
  {
    int fd;

    fd = open ("somefile", O_RDONLY, 0);

    SCHEME_CALL ( [...] );

    close (fd);
  }

-t