On Wed, 2013-07-31 at 09:55 +0100, Luís Oliveira wrote:
On Tue, Jul 30, 2013 at 4:33 PM, Felix Filozov ffilozov@gmail.com wrote:
When defining a foreign function using def-foreign-call, there's an option one could set called :allow-gc. Setting it to :always, allows the garbage collector to run while the foreign function is executing.
At the moment CFFI uses the default value for :allow-gc, which is :never. This prevents GC from running when a foreign function is executing.
Moreover, once GC blocks, other processes can't make progress. In my case, I need GC to run during foreign function execution.
I understand the advantages of overriding ACL's default. What are the drawbacks?
Also, what do other Lisps do? We probably want to be as consistent as possible across the platforms we support.
SBCL never disables GC globally, and I don't think that CCL, ECL or ABCL do that either. http://www.lispworks.com/documentation/lw61/FLI/html/fli-94.htm#pgfId-107027... has no mention of GC, so it would seem that among SMP Lisps Allegro is the only one to do sophisticated stuff. CMUCL and Clisp are currently single-threaded so GC is implicitly disabled during foreign calls.