pending gc. Similarly, if gc is triggered in another thread then it
waits until gc is enabled in this thread."
`(unwind-protect
- (let ((*gc-inhibit* t))
- ,@body)
- ;; the test is racy, but it can err only on the overeager side
- (when (and (not *gc-inhibit*)
- (or #!+sb-thread *stop-for-gc-pending*
- *gc-pending*))
- (sb!unix::receive-pending-interrupt))))
+ (let ((*gc-inhibit* t))
+ ,@body)
+ ;; the test is racy, but it can err only on the overeager side
+ (sb!kernel::maybe-handle-pending-gc)))
\f
;;; EOF-OR-LOSE is a useful macro that handles EOF.
;;; This macro sets up some local vars for use by the
;;; FAST-READ-CHAR macro within the enclosed lexical scope. The stream
;;; is assumed to be a ANSI-STREAM.
+;;;
+;;; KLUDGE: Some functions (e.g. ANSI-STREAM-READ-LINE) use these variables
+;;; directly, instead of indirecting through FAST-READ-CHAR.
(defmacro prepare-for-fast-read-char (stream &body forms)
`(let* ((%frc-stream% ,stream)
(%frc-method% (ansi-stream-in %frc-stream%))
`(setf (ansi-stream-in-index %frc-stream%) %frc-index%))
;;; a macro with the same calling convention as READ-CHAR, to be used
-;;; within the scope of a PREPARE-FOR-FAST-READ-CHAR
+;;; within the scope of a PREPARE-FOR-FAST-READ-CHAR.
(defmacro fast-read-char (&optional (eof-error-p t) (eof-value ()))
`(cond
((not %frc-buffer%)