* fixed another bug in backquote printing: no more destructive
modification of the form's list structure. (reported by Brian
Downing)
+ * fixed bug in INTERRUPT-THREAD: pin the function, so that it cannot
+ move between its address being taken and the call to
+ interrupt_thread, fixing a crashing race condition.
* the SB-POSIX contrib implementation has been adjusted so that it
no longer exhibits ridiculously poor performance when constructing
instances corresponding to C structs.
;;; though, it's a good deal gentler than the last-resort functions above
(defun interrupt-thread (thread function)
- "Interrupt THREAD and make it run FUNCTION. "
- (sb!unix::syscall* ("interrupt_thread"
- sb!alien:unsigned-long sb!alien:unsigned-long)
- thread
- thread (sb!kernel:get-lisp-obj-address
- (coerce function 'function))))
+ "Interrupt THREAD and make it run FUNCTION."
+ (let ((function (coerce function 'function)))
+ (sb!sys:with-pinned-objects (function)
+ (sb!unix::syscall* ("interrupt_thread"
+ sb!alien:unsigned-long sb!alien:unsigned-long)
+ thread
+ thread
+ (sb!kernel:get-lisp-obj-address function)))))
+
(defun terminate-thread (thread-id)
"Terminate the thread identified by THREAD-ID, by causing it to run
SB-EXT:QUIT - the usual cleanup forms will be evaluated"
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.11.17"
+"0.8.11.18"