~ chicken-core (chicken-5) 8969da90e403c2fcdda2814c3b30243a1d0d2003
commit 8969da90e403c2fcdda2814c3b30243a1d0d2003
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Tue Jun 21 10:12:16 2011 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Tue Jun 21 10:12:16 2011 +0200
Revert "also check for errors in select(2) call in scheduler; don't ignore sanity checks anymore"
This reverts commit 3fe53ece5a210d5a67d7ebc764af038593b00824.
This might break something and will be postponed until 4.7.2
diff --git a/scheduler.scm b/scheduler.scm
index a1a177e6..a3efc67c 100644
--- a/scheduler.scm
+++ b/scheduler.scm
@@ -74,10 +74,9 @@ C_word C_msleep(C_word ms) {
return C_SCHEME_TRUE;
}
#endif
-static fd_set C_fdset_input, C_fdset_output, C_fdset_error;
+static fd_set C_fdset_input, C_fdset_output;
#define C_fd_test_input(fd) C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_input))
#define C_fd_test_output(fd) C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_output))
-#define C_fd_test_error(fd) C_mk_bool(FD_ISSET(C_unfix(fd), &C_fdset_error))
EOF
) )
@@ -164,7 +163,7 @@ EOF
(let ([nt (remove-from-ready-queue)])
(cond [(not nt)
(if (and (null? ##sys#timeout-list) (null? ##sys#fd-list))
- (panic "deadlock")
+ (##sys#halt "deadlock")
(loop1) ) ]
[(eq? (##sys#slot nt 3) 'ready) (switch nt)]
[else (loop2)] ) ) ) ) ) )
@@ -387,11 +386,11 @@ EOF
(fdset-output-set fd) )
(else (panic "fdset-set: invalid i/o direction"))))
-(define (fdset-test inf outf errf i/o)
+(define (fdset-test inf outf i/o)
(case i/o
- ((#t #:input) (or inf errf))
- ((#f #:output) (or outf errf))
- ((#:all) (or inf outf errf))
+ ((#t #:input) inf)
+ ((#f #:output) outf)
+ ((#:all) (or inf outf))
(else (panic "fdset-test: invalid i/o direction"))))
(define (##sys#thread-block-for-i/o! t fd i/o)
@@ -435,10 +434,9 @@ EOF
(let* ([a (car lst)]
[fd (car a)]
[inf (##core#inline "C_fd_test_input" fd)]
- [outf (##core#inline "C_fd_test_output" fd)]
- [errf (##core#inline "C_fd_test_error" fd)] )
- (dbg "fd " fd " state: input=" inf ", output=" outf ", error=" errf)
- (if (or inf outf errf)
+ [outf (##core#inline "C_fd_test_output" fd)] )
+ (dbg "fd " fd " state: input=" inf ", output=" outf)
+ (if (or inf outf)
(let loop2 ((threads (cdr a)) (keep '()))
(if (null? threads)
(if (null? keep)
@@ -457,9 +455,13 @@ EOF
(##sys#remove-from-timeout-list t))
(##sys#thread-basic-unblock! t)
(loop2 (cdr threads) keep))
- ((not (eq? fd (car p)))
- (panic "thread is registered for I/O on unknown file-descriptor"))
- ((fdset-test inf outf errf (cdr p))
+ ((or (not (eq? fd (car p)))
+ ;; thread on fd-list has incorrect
+ ;; file-descriptor registered.
+ ;; We just assume this is the right one and
+ ;; unblock.
+ ;; XXX Needs to be investigated...
+ (fdset-test inf outf (cdr p)))
(when (##sys#slot t 4) ; also blocked for timeout?
(##sys#remove-from-timeout-list t))
(##sys#thread-basic-unblock! t)
Trap