From: Gábor M. <me...@re...> - 2010-04-07 19:58:47
|
On Tue, Apr 6, 2010 at 11:36 PM, Tobias C. Rittweiler <tc...@fr...> wrote: > Nikodemus Siivola <nik...@ra...> writes: > >> > (defmacro with-foo (... &body body) >> > (with-unique-names (interrupts-enabled?) >> > `(let ((,interrupts-enabled? *interrupts-enabled*)) >> > (without-interrupts >> > (unwind-protect >> > (progn (frob1) >> > (if interrupts-enabled? >> > (with-local-interrupts >> > ,@body) >> > (allow-with-interupts >> > ,@body))) >> > (frob2)))))) >> > >> > it would, AFAICS, not leak this implementation detail. >> >> I'm not awake enough to think this through, but if this is The Right >> Pattern, then I suspect WITH-LOCAL-INTERRUPTS should implement this -- >> and not leave it for the fallible human to take care of every time >> W-L-I is used. > > Yes, that were my thoughts. It's actually fairly easy to make it do > so. However, it would lose the easy explanation of being tantamount to > ALLOW-WITH-INTERRUPTS+WITH-INTERRUPTS. Gabor, what's your opinion? Pieces of code that use without-interrupts and allow-with-interrupts are composable sanely. However, a single with-interrupt where it's actually allowed by *allow-with-interrupts* leads to the same problems that the macro above sets out to solve. I've just gone through all uses of with-interrupts in the sbcl sources (there are only a few) and most simply want to make sure that interrupts are enabled when a condition is signalled or when calling user code which often leads to the former case. Two interesting uses of with-interrupts are in signal-timeout and post-gc which means that almost anywhere with a deadline in effect or where consing is done interrupts may get enabled asynchronously. What about simply telling users that anywhere with *ALLOW-WITH-INTERRUPTS* interrupts may become enabled synchronously or asynchronously and SBCL itself will try to be conservative in actually enabling them, but that's the full extent of its promise. Being conservative may include with-local-interrupts or some variant of it doing the with-foo dance, but this cannot achieve that kind of strict composability Tobias would like to have. Cheers, Gabor > -T. |