mirror of
git://git.code.sf.net/p/sbcl/sbcl
synced 2026-09-10 07:26:40 -04:00
0.9.2.12:
* bug fix: no more highly sporadic "couldn't check whether ~S is
readable" when reading a stream and an interrupt hits in the middle
of a select system call
* added with-restarted-syscall macro
* added abcl support to build scripts
This commit is contained in:
parent
5aa17a95f0
commit
de26f53dce
3
NEWS
3
NEWS
|
|
@ -5,6 +5,9 @@ changes in sbcl-0.9.3 relative to sbcl-0.9.2:
|
|||
* Support for the koi8-r external format. (thanks to Ivan Boldyrev)
|
||||
* Bug fix: OPEN no longer fails when *PRINT-READABLY* is T. (thanks
|
||||
to Zach Beane)
|
||||
* bug fix: no more highly sporadic "couldn't check whether ~S is
|
||||
readable" when reading a stream and an interrupt hits in the middle
|
||||
of a select system call
|
||||
* threads
|
||||
** added x86-64 support
|
||||
** incompatible change: the threading api now works with thread
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ $SBCL_XC_HOST <<-'EOF' || exit 1
|
|||
:map-file-name "output/cold-sbcl.map")
|
||||
#+cmu (ext:quit)
|
||||
#+clisp (ext:quit)
|
||||
#+abcl (ext:quit)
|
||||
EOF
|
||||
|
||||
echo //testing for consistency of first and second GENESIS passes
|
||||
|
|
|
|||
|
|
@ -54,4 +54,5 @@ $SBCL_XC_HOST <<-'EOF' || exit 1
|
|||
(sb!vm:genesis :c-header-dir-name "src/runtime/genesis")
|
||||
#+cmu (ext:quit)
|
||||
#+clisp (ext:quit)
|
||||
#+abcl (ext:quit)
|
||||
EOF
|
||||
|
|
|
|||
|
|
@ -136,6 +136,7 @@ $SBCL_XC_HOST <<-'EOF' || exit 1
|
|||
#+clisp (ext:saveinitmem "output/after-xc.core"))
|
||||
#+cmu (ext:quit)
|
||||
#+clisp (ext:quit)
|
||||
#+abcl (ext:quit)
|
||||
EOF
|
||||
|
||||
# Run GENESIS (again) in order to create cold-sbcl.core. (The first
|
||||
|
|
|
|||
|
|
@ -1920,6 +1920,7 @@ no guarantees of interface stability."
|
|||
"NANOSLEEP"
|
||||
"UID-USERNAME"
|
||||
"UID-HOMEDIR"
|
||||
"WITH-RESTARTED-SYSCALL"
|
||||
|
||||
;; stuff with a one-to-one mapping to Unix constructs
|
||||
"D-INO" "D-NAME" "D-NAMLEN" "D-OFF" "D-RECLEN" "DEV-T" "DIRECT"
|
||||
|
|
|
|||
|
|
@ -638,22 +638,19 @@
|
|||
(setf (fd-stream-ibuf-head stream) 0)
|
||||
(setf (fd-stream-ibuf-tail stream) tail))))
|
||||
(setf (fd-stream-listen stream) nil)
|
||||
(multiple-value-bind (count errno)
|
||||
;; FIXME: Judging from compiler warnings, this WITH-ALIEN form expands
|
||||
;; into something which uses the not-yet-defined type
|
||||
;; (SB!ALIEN-INTERNALS:ALIEN (* (SB!ALIEN:STRUCT SB!UNIX:FD-SET))).
|
||||
;; This is probably inefficient and unsafe and generally bad, so
|
||||
;; try to find some way to make that type known before
|
||||
;; this is compiled.
|
||||
(sb!alien:with-alien ((read-fds (sb!alien:struct sb!unix:fd-set)))
|
||||
(sb!unix:fd-zero read-fds)
|
||||
(sb!unix:fd-set fd read-fds)
|
||||
(sb!unix:unix-fast-select (1+ fd)
|
||||
(sb!alien:addr read-fds)
|
||||
nil
|
||||
nil
|
||||
0
|
||||
0))
|
||||
(sb!unix:with-restarted-syscall (count errno)
|
||||
;; FIXME: Judging from compiler warnings, this WITH-ALIEN form expands
|
||||
;; into something which uses the not-yet-defined type
|
||||
;; (SB!ALIEN-INTERNALS:ALIEN (* (SB!ALIEN:STRUCT SB!UNIX:FD-SET))).
|
||||
;; This is probably inefficient and unsafe and generally bad, so
|
||||
;; try to find some way to make that type known before
|
||||
;; this is compiled.
|
||||
(sb!alien:with-alien ((read-fds (sb!alien:struct sb!unix:fd-set)))
|
||||
(sb!unix:fd-zero read-fds)
|
||||
(sb!unix:fd-set fd read-fds)
|
||||
(sb!unix:unix-fast-select (1+ fd)
|
||||
(sb!alien:addr read-fds)
|
||||
nil nil 0 0))
|
||||
(case count
|
||||
(1)
|
||||
(0
|
||||
|
|
@ -1515,13 +1512,14 @@
|
|||
(fd-stream-ibuf-tail fd-stream)))
|
||||
(fd-stream-listen fd-stream)
|
||||
(setf (fd-stream-listen fd-stream)
|
||||
(eql (sb!alien:with-alien ((read-fds (sb!alien:struct
|
||||
sb!unix:fd-set)))
|
||||
(sb!unix:fd-zero read-fds)
|
||||
(sb!unix:fd-set (fd-stream-fd fd-stream) read-fds)
|
||||
(sb!unix:unix-fast-select (1+ (fd-stream-fd fd-stream))
|
||||
(sb!alien:addr read-fds)
|
||||
nil nil 0 0))
|
||||
(eql (sb!unix:with-restarted-syscall ()
|
||||
(sb!alien:with-alien ((read-fds (sb!alien:struct
|
||||
sb!unix:fd-set)))
|
||||
(sb!unix:fd-zero read-fds)
|
||||
(sb!unix:fd-set (fd-stream-fd fd-stream) read-fds)
|
||||
(sb!unix:unix-fast-select (1+ (fd-stream-fd fd-stream))
|
||||
(sb!alien:addr read-fds)
|
||||
nil nil 0 0)))
|
||||
1))))
|
||||
(:unread
|
||||
(setf (fd-stream-unread fd-stream) arg1)
|
||||
|
|
@ -1602,16 +1600,14 @@
|
|||
(setf (fd-stream-ibuf-tail fd-stream) 0)
|
||||
(catch 'eof-input-catcher
|
||||
(loop
|
||||
(let ((count (sb!alien:with-alien ((read-fds (sb!alien:struct
|
||||
sb!unix:fd-set)))
|
||||
(sb!unix:fd-zero read-fds)
|
||||
(sb!unix:fd-set (fd-stream-fd fd-stream) read-fds)
|
||||
(sb!unix:unix-fast-select (1+ (fd-stream-fd fd-stream))
|
||||
(sb!alien:addr read-fds)
|
||||
nil
|
||||
nil
|
||||
0
|
||||
0))))
|
||||
(let ((count (sb!unix:with-restarted-syscall ()
|
||||
(sb!alien:with-alien ((read-fds (sb!alien:struct
|
||||
sb!unix:fd-set)))
|
||||
(sb!unix:fd-zero read-fds)
|
||||
(sb!unix:fd-set (fd-stream-fd fd-stream) read-fds)
|
||||
(sb!unix:unix-fast-select (1+ (fd-stream-fd fd-stream))
|
||||
(sb!alien:addr read-fds)
|
||||
nil nil 0 0)))))
|
||||
(cond ((eql count 1)
|
||||
(refill-buffer/fd fd-stream)
|
||||
(setf (fd-stream-ibuf-head fd-stream) 0)
|
||||
|
|
|
|||
|
|
@ -91,6 +91,19 @@
|
|||
|
||||
(defmacro int-syscall ((name &rest arg-types) &rest args)
|
||||
`(syscall (,name ,@arg-types) (values result 0) ,@args))
|
||||
|
||||
(defmacro with-restarted-syscall ((&optional (value (gensym))
|
||||
(errno (gensym)))
|
||||
syscall-form &rest body)
|
||||
#!+sb-doc
|
||||
"Evaluate BODY with VALUE and ERRNO bound to the return values of
|
||||
SYSCALL-FORM. Repeat evaluation of SYSCALL-FORM if it is interrupted."
|
||||
`(let (,value ,errno)
|
||||
(loop (multiple-value-setq (,value ,errno)
|
||||
,syscall-form)
|
||||
(unless (eql ,errno sb!unix:eintr)
|
||||
(return (values ,value ,errno))))
|
||||
,@body))
|
||||
|
||||
;;;; hacking the Unix environment
|
||||
|
||||
|
|
|
|||
|
|
@ -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".)
|
||||
"0.9.2.11"
|
||||
"0.9.2.12"
|
||||
|
|
|
|||
Loading…
Reference in a new issue