The values of
with interrupts blocked. On exit, whether local or not, the
are executed with interrupts blocked.
In compiled code, the macro is equvalent to
However, in interpreted code the macro is expanded to ensure that the call to
actually happens. If the above form is interpreted and
uses current-process-unblock-interrupts, the evaluator may throw (if the process is killed, for example) before calling current-process-unblock-interrupts.
Both the protected form and the cleanups can block and unblock interrupts using current-process-block-interrupts and current-process-unblock-interrupts. Typically the protected form would set up something and then unblock the interrupts. The cleanups may unblock interrupts if some of the cleanups are essential and others are not.
Blocking interrupts causes the process to not respond to interrupts, including killing. You should make sure that forms which are executed with interrupts blocked do not hang.
LispWorks User Guide and Reference Manual - 22 Dec 2009