Within the dynamic scope of
allowing-block-interrupts, you can switch the blocking of interrupts on and off. Blocking interrupts prevents any interruption of the current process, including process-interrupt, process-kill, process-reset, process-break and process-stop. These interrupts are all queued and processed once interrupts become unblocked.
If start-blocked is true,
allowing-block-interrupts blocks interrupts on entry. If start-blocked is false, the state does not change on entry. If you want to ensure that the initial forms of
allowing-block-interrupts are interruptible even if it is inside the scope of another
allowing-block-interrupts, you need to explicitly call current-process-unblock-interrupts on entry.
In compiled code,
allowing-block-interrupts with a true value of the start-blocked argument is guaranteed not to process interrupts before an explicit change to the blocking state (that includes exiting the scope of
allowing-block-interrupts). In particular, if the first cleanup form of an
unwind-protect is a call to
allowing-block-interrupts, it is guaranteed to execute without interrupts on exit from the protected form. No such guarantee is given in interpreted code.
On exit from
allowing-block-interrupts, the current state of interrupt blocking and whether there is a surrounding use of
allowing-block-interrupts or with-interrupts-blocked is restored to the state that existed on entry.
LispWorks User Guide and Reference Manual - 13 Feb 2015