provided. (reported by Cedric St-Jean)
* bug fix: circularity handling in the reader did not treat raw
structure slots correctly. (reported by Cedric St-Jean)
+ * bug fix: SERVE-EVENT occasionally signaled an error about bogus
+ file descriptors when there were none.
changes in sbcl-1.0.21 relative to 1.0.20:
* new feature: the compiler is able to track the effective type of a
(sb!unix:unix-fstat (handler-descriptor handler)))
(setf (handler-bogus handler) t)
(push handler bogus-handlers)))
- (restart-case (error "~S ~[have~;has a~:;have~] bad file descriptor~:P."
- bogus-handlers (length bogus-handlers))
- (remove-them ()
- :report "Remove bogus handlers."
- (with-descriptor-handlers
- (setf *descriptor-handlers*
- (delete-if #'handler-bogus *descriptor-handlers*))))
- (retry-them ()
- :report "Retry bogus handlers."
- (dolist (handler bogus-handlers)
- (setf (handler-bogus handler) nil)))
- (continue ()
- :report "Go on, leaving handlers marked as bogus.")))
+ (when bogus-handlers
+ (restart-case (error "~S ~[have~;has a~:;have~] bad file descriptor~:P."
+ bogus-handlers (length bogus-handlers))
+ (remove-them ()
+ :report "Remove bogus handlers."
+ (with-descriptor-handlers
+ (setf *descriptor-handlers*
+ (delete-if #'handler-bogus *descriptor-handlers*))))
+ (retry-them ()
+ :report "Retry bogus handlers."
+ (dolist (handler bogus-handlers)
+ (setf (handler-bogus handler) nil)))
+ (continue ()
+ :report "Go on, leaving handlers marked as bogus."))))
nil)
\f
;; FIXME: Check for other errnos. Why do we return true
;; when interrupted?
#!-win32
- (if (eql err sb!unix:eintr)
- t
- (handler-descriptors-error))
+ (case err
+ (#.sb!unix:ebadf
+ (handler-descriptors-error))
+ (#.sb!unix:eintr
+ t)
+ (otherwise
+ (with-simple-restart (continue "Ignore failure and continue.")
+ (simple-perror "Unix system call select() failed" :errno err))))
#!+win32
(handler-descriptors-error))
((plusp value)