- (without-interrupts
- ;; We need to disable interrupts before disabling GC, so that
- ;; signal handlers using locks don't accidentally try to grab
- ;; them with GC inhibited.
- ;;
- ;; It would be nice to implement this with just a single UWP, but
- ;; unfortunately it seems that it cannot be done: the naive
- ;; solution of binding both *INTERRUPTS-ENABLED* and
- ;; *GC-INHIBIT*, and checking for both pending GC and interrupts
- ;; in the cleanup breaks if we have a GC pending, but no
- ;; interrupts, and we receive an asynch unwind while checking for
- ;; the pending GC: we unwind before handling the pending GC, and
- ;; will be left running with further GCs blocked due to the GC
- ;; pending flag.
+ ;; We need to disable interrupts before disabling GC, so
+ ;; that signal handlers using locks don't accidentally try
+ ;; to grab them with GC inhibited.
+ (let ((*in-without-gcing* t))