Felix Filozov <ffilo...@gmail.com> writes: > Looking into Allegro CL SMP's manual, there's a macro called > with-delayed-interrupts, which should prevent interrupts and GC from > running. However, the wrong errno was still returned when I used this > macro. I will ask Franz if such a macro exists.
What's your test case like? > I started exploring your second suggestion. I created an errno > defstruct (this is what the user passes), in the CFFI package, and I > tried passing that structure to the CFFI-SYS layer to be modified, but > then I realized that CFFI-SYS doesn't know anything about the CFFI > package so it can't modify the structure. So I'm passing a function to > CFFI-SYS, which gets called with the returned errno value as an > argument. I don't know if I like this callback mechanism. Seems a bit heavy handed, yeah. We can split cffi-sys in two files: a shared file (with the package define and perhaps that structure definition) and an implementation-specific file. > Also, while reading through the code I noticed that there's some edge > cases that would need to be handled. For example %defcfun may make a > call to foreign-funcall if the argument types and the returns types > are considered call-by-value. What does that mean? We've recently added support for passing structures by value. When that functionality is needed, we use libffi for invoking the foreign function. I have no idea how we can reliably get errno in that case. > I also don't quite understand what entry-vec is, if that's something > that can be ignored for now. I don't remember the details, but doc/allegro-internals.txt has some info about it. Cheers, -- Luís Oliveira http://kerno.org/~luis