X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ftarget-signal.lisp;h=d38076006297b1a92dd0b3251be1f4acd10b1789;hb=829ced3e78a23ba153ba4db64e6ea6984c2313b6;hp=3fd22f3eb7c511b3cb1ab5f1cd88b8a276a1be57;hpb=37d3828773e2f847bb1ed7522b0af4fb8e736fc8;p=sbcl.git diff --git a/src/code/target-signal.lisp b/src/code/target-signal.lisp index 3fd22f3..d380760 100644 --- a/src/code/target-signal.lisp +++ b/src/code/target-signal.lisp @@ -214,6 +214,15 @@ (declare (type system-area-pointer context)) (/show "in Lisp-level SIGINT handler" (sap-int context)) (flet ((interrupt-it () + ;; This seems wrong to me on multi-threaded builds. The + ;; closed-over signal context belongs to a SIGINT handler. + ;; But this function gets run through INTERRUPT-THREAD, + ;; i.e. in in a SIGPIPE handler, at a different point in time + ;; or even a different thread. How do we know that the + ;; SIGINT's context structure from the other thread is still + ;; alive and meaningful? Why do we care? If we even need + ;; the context and PC, shouldn't they come from the SIGPIPE's + ;; context? --DFL (with-alien ((context (* os-context-t) context)) (with-interrupts (let ((int (make-condition 'interactive-interrupt