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

Re: non-local exits are icky

This page is part of the web mail archives of SRFI 50 from before July 7th, 2015. The new archives for SRFI 50 contain all messages, not just those from before July 7th, 2015.



    > 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