memory, stack, alien stack, binding stack, encountering a memory
fault, etc. In the absence of --lose-on-corruption a warning is
printed to stderr.
+ * enhancement: detect binding stack exhaustion
+ * enhancement: detect alien stack exhaustion on x86/x86-64
* improvement: generally more stable and reliable interrupt handling
* improvement: there is a per thread interruption queue,
interruptions are executed in order of arrival
* bug fix: fix deadlocks related to starting threads
* bug fix: fix deadlines on locks on futex platforms
* bug fix: restore errno in signal handlers
+ * bug fix: fix deadlocks related to hash tables
+ * bug fix: fix deadlocks in pcl
changes in sbcl-1.0.25 relative to 1.0.24:
* incompatible change: SB-INTROSPECT:FUNCTION-ARGLIST is deprecated, to be
;; Needless to say, this also excludes some internal bits, but
;; getting there is too much detail when "unspecified" says what
;; is important -- unpredictable, but harmless.
- `(sb!thread::with-recursive-spinlock ((hash-table-spinlock ,hash-table))
+ `(sb!thread::with-recursive-system-spinlock
+ ((hash-table-spinlock ,hash-table))
,@body))
(defvar *package-lock*)
(!cold-init-forms
- (setf *package-lock* (sb!thread::make-spinlock :name "Package Lock")))
+ (setf *package-lock* (sb!thread:make-mutex :name "Package Lock")))
(defmacro with-packages ((&key) &body forms)
- `(sb!thread::with-recursive-spinlock (*package-lock*)
+ ;; FIXME: Since name conflicts can be signalled while holding the
+ ;; mutex, user code can be run leading to lock ordering problems.
+ ;;
+ ;; This used to be a spinlock, but there it can be held for a long
+ ;; time while the debugger waits for user input.
+ `(sb!thread:with-recursive-lock (*package-lock*)
,@forms))
;;; Make a package hashtable having a prime number of entries at least
(defmethod add-direct-method :around ((specializer specializer) method)
;; All the actions done under this lock are done in an order
;; that is safe to unwind at any point.
- (sb-thread::with-recursive-spinlock (*specializer-lock*)
+ (sb-thread::with-recursive-system-spinlock (*specializer-lock*)
(call-next-method)))
(defmethod remove-direct-method :around ((specializer specializer) method)
;; All the actions done under this lock are done in an order
;; that is safe to unwind at any point.
- (sb-thread::with-recursive-spinlock (*specializer-lock*)
+ (sb-thread::with-recursive-system-spinlock (*specializer-lock*)
(call-next-method)))
(defmethod add-direct-method ((specializer class) (method method))
;;; 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.25.50"
+"1.0.25.51"