WARNING: bogus form-number in form! The source file has probably
been changed too much to cope with.
+
+415: Issues creating large arrays on x86-64/Linux and x86/Darwin
+
+ (make-array (1- array-dimension-limit))
+
+ causes a GC invariant violation on x86-64/Linux, and
+ an unhandled SIGILL on x86/Darwin.
+
+416: backtrace confusion
+
+ (defun foo (x)
+ (let ((v "foo"))
+ (flet ((bar (z)
+ (oops v z)
+ (oops z v)))
+ (bar x)
+ (bar v))))
+ (foo 13)
+
+ gives the correct error, but the backtrace shows
+ 1: (SB-KERNEL:FDEFINITION-OBJECT 13 NIL)
+ as the second frame.
+
+
+
+
* bug fix: interning EQL-specializers is now thread and interrupt safe.
* bug fix: asdf systems with dependencies to the SB-POSIX or
SB-BSD-SOCKETS contribs can be loaded with :FORCE T.
+ * bug fix: interrupt safety of applicable method computation has been
+ improved.
changes in sbcl-1.0.6 relative to sbcl-1.0.5:
* new contrib: sb-cover, an experimental code coverage tool, is included
"WITH-INTERRUPTS" "WITH-LOCAL-INTERRUPTS"
"WITH-PINNED-OBJECTS" "WITHOUT-GCING"
"WITHOUT-INTERRUPTS"
+ "WITH-INTERRUPT-BINDINGS"
"WORDS"))
#s(sb-cold:package-data
sb!vm::*fp-constant-lg2*
sb!vm::*fp-constant-ln2*
sb!vm:*alloc-signal*
- sb!pcl::..slot-unbound..))
+ sb!pcl::..slot-unbound..
+ sb!pcl::*cache-miss-values-stack*
+ sb!pcl::*dfun-miss-gfs-on-stack*))
(in-package "SB!UNIX")
+(defmacro with-interrupt-bindings (&body body)
+ `(let
+ ;; KLUDGE: Whatever is on the PCL stacks before the interrupt
+ ;; handler runs doesn't really matter, since we're not on the
+ ;; same call stack, really -- and if we don't bind these (esp.
+ ;; the cache one) we can get a bogus metacircle if an interrupt
+ ;; handler calls a GF that was being computed when the interrupt
+ ;; hit.
+ ((sb!pcl::*cache-miss-values-stack* nil)
+ (sb!pcl::*dfun-miss-gfs-on-stack* nil))
+ ,@body))
+
(defun invoke-interruption (function)
- (without-interrupts
- ;; Reset signal mask: the C-side handler has blocked all
- ;; deferrable interrupts before arranging return to lisp. This is
- ;; safe because we can't get a pending interrupt before we unblock
- ;; signals.
- ;;
- ;; FIXME: Should we not reset the _entire_ mask, just restore it
- ;; to the state before we got the interrupt?
- (reset-signal-mask)
- (allow-with-interrupts (funcall function))))
-
-(defmacro in-interruption ((&rest args) &body body)
+ (with-interrupt-bindings
+ (without-interrupts
+ ;; Reset signal mask: the C-side handler has blocked all
+ ;; deferrable interrupts before arranging return to lisp. This is
+ ;; safe because we can't get a pending interrupt before we unblock
+ ;; signals.
+ ;;
+ ;; FIXME: Should we not reset the _entire_ mask, but just
+ ;; restore it to the state before we got the interrupt?
+ (reset-signal-mask)
+ (allow-with-interrupts (funcall function)))))
+
+(defmacro in-interruption ((&key) &body body)
#!+sb-doc
"Convenience macro on top of INVOKE-INTERRUPTION."
- `(invoke-interruption (lambda () ,@body) ,@args))
+ `(dx-flet ((interruption () ,@body))
+ (invoke-interruption #'interruption)))
\f
;;;; system calls that deal with signals
won't like the effect."
#!-sb-thread (declare (ignore thread))
#!-sb-thread
- (with-interrupts (funcall function))
+ (with-interrupt-bindings
+ (with-interrupts (funcall function)))
#!+sb-thread
(if (eq thread *current-thread*)
- (with-interrupts (funcall function))
+ (with-interrupt-bindings
+ (with-interrupts (funcall function)))
(let ((os-thread (thread-os-thread thread)))
(cond ((not os-thread)
(error 'interrupt-thread-error :thread thread))
struct thread *thread = arch_os_get_current_thread();
print_generation_stats(1);
fprintf(stderr, "GC control variables:\n");
- fprintf(stderr, " *GC-INHIBIT* = %s\n *GC-PENDING* = %s\n",
+ fprintf(stderr, " *GC-INHIBIT* = %s\n *GC-PENDING* = %s\n",
SymbolValue(GC_INHIBIT,thread)==NIL ? "false" : "true",
SymbolValue(GC_PENDING,thread)==NIL ? "false" : "true");
#ifdef LISP_FEATURE_SB_THREAD
;;; 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".)
-"1.0.6.58"
+"1.0.6.59"