[cffi-devel] Safe errno collection

Luís Oliveira luismbo at gmail.com
Mon Jan 19 02:54:42 UTC 2009


On Mon, Jan 19, 2009 at 2:31 AM, John Fremlin <jf at msi.co.jp> wrote:
> Ideally there would be a way to use the def-foreign-call errno
> collection in Allegro CL via CFFI.
>
> For example, if the foreign-function is trace'd then the
> without-interrupts mechanism (sporadically) fails.
>
> Although it is simple to make a cffi-sys:errno symbol-macro, I think
> that logically the errno is only valid immediately after a
> foreign-function call.

I'm just trying to follow the usual CFFI philosophy: figure out the
minimal CFFI-SYS operations required and implement the rest in the
CFFI package. So far that'd be something like: GET-ERRNO, SET-ERRNO
and WITHOUT-WHATEVER in CFFI-SYS, and an ERRNO symbol macro in CFFI
(optional) and something along the lines of Osicat's ERRNO-WRAPPER.

I wonder if you can find out what hoops Allegro has to jump through to
ensure errno is right?


> The idea that GC must not modify errno must be false on at
> least a few implementations ;-)

Sounds like we could test that in the test suite.


> We should not pretend that it is possible to get errno at an arbitrary
> point after a foreign function call.

Yeah, but I still haven't fully understood the exact failure cases.
Also, it sounds like this sort of thing would be problematic for all
sorts of stateful C APIs.

-- 
Luís Oliveira
http://student.dei.uc.pt/~lmoliv/




More information about the cffi-devel mailing list