Skip to content

Commit

Permalink
1.0.6.47: small fixes
Browse files Browse the repository at this point in the history
 * When expanding the CLOS cache, insert the new value before copying
   the old ones, in order to ensure that FILL-CACHE always terminations.

 * Cancel deadline before signalling the DEADLINE-ERROR, so that same
   deadline cannot be caught again during unwind.
  • Loading branch information
nikodemus committed Jun 15, 2007
1 parent 7d853ed commit 6e953f6
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 3 deletions.
5 changes: 5 additions & 0 deletions src/code/deadline.lisp
Expand Up @@ -65,13 +65,18 @@ deadlines while the condition is being handled."
;; FIXME: Maybe we should make ERROR do WITH-INTERRUPTS instead of
;; putting it all over the place (now that we have ALLOW-WITH-INTERRUPTS.)
(with-interrupts
;; Don't signal a deadline while handling a non-deadline timeout.
(let ((*deadline* nil))
(apply #'error datum arguments))))

(defun signal-deadline ()
#!+sb-doc
"Signal a DEADLINE-TIMEOUT condition. Implementors of blocking functions
are responsible for calling this when a deadline is reached."
;; Make sure we don't signal the same deadline twice. LET is not good
;; enough: we might catch the same deadline again while unwinding.
(when *deadline*
(setf *deadline* nil))
(signal-timeout 'deadline-timeout :seconds *deadline-seconds*))

;;; Returns TIMEOUT-SEC, TIMEOUT-USEC, DEADLINE-SEC, DEADLINE-USEC, SIGNALP
Expand Down
9 changes: 7 additions & 2 deletions src/pcl/cache.lisp
Expand Up @@ -337,7 +337,7 @@

;;;; Copies and expands the cache, dropping any invalidated or
;;;; incomplete lines.
(defun copy-and-expand-cache (cache)
(defun copy-and-expand-cache (cache layouts value)
(let ((copy (%copy-cache cache))
(length (length (cache-vector cache))))
(when (< length +cache-vector-max-length+)
Expand All @@ -351,6 +351,11 @@
(cache-depth copy) 0
(cache-mask copy) (compute-cache-mask length (cache-line-size cache))
(cache-limit copy) (compute-limit (/ length (cache-line-size cache))))
;; First insert the new one -- if we don't do this first and
;; the cache has reached it's maximum size we may end up
;; looping in FILL-CACHE.
(unless (try-update-cache copy layouts value)
(bug "Could not insert ~S:~S to supposedly empty ~S." layouts value cache))
(map-cache (lambda (layouts value)
(unless (try-update-cache copy layouts value)
;; If the cache would grow too much we drop the
Expand Down Expand Up @@ -413,7 +418,7 @@
;; we just drop the invalid entries.
(%fill-cache (copy-cache cache) layouts value))
(t
(%fill-cache (copy-and-expand-cache cache) layouts value)))))
(copy-and-expand-cache cache layouts value)))))
(if (listp layouts)
(%fill-cache cache layouts value)
(%fill-cache cache (list layouts) value))))
Expand Down
2 changes: 1 addition & 1 deletion version.lisp-expr
Expand Up @@ -17,4 +17,4 @@
;;; 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.46"
"1.0.6.47"

0 comments on commit 6e953f6

Please sign in to comment.