~ chicken-core (chicken-5) 9f319b5e425b142f9cd7b9bba89ab9d9ac440069
commit 9f319b5e425b142f9cd7b9bba89ab9d9ac440069
Author: Peter Bex <peter.bex@xs4all.nl>
AuthorDate: Fri Oct 11 20:18:35 2013 +0200
Commit: Peter Bex <peter.bex@xs4all.nl>
CommitDate: Fri Oct 11 20:18:35 2013 +0200
Be helpful: Add a little debugging info to the panics in the scheduler...
diff --git a/scheduler.scm b/scheduler.scm
index 4ef54e6a..bdc7c52d 100644
--- a/scheduler.scm
+++ b/scheduler.scm
@@ -293,7 +293,8 @@ EOF
(define (##sys#thread-block-for-timeout! t tm)
(dbg t " blocks for timeout " tm)
(unless (flonum? tm) ; to catch old code that uses fixnum timeouts
- (panic "##sys#thread-block-for-timeout!: invalid timeout"))
+ (panic
+ (sprintf "##sys#thread-block-for-timeout!: invalid timeout: ~S" tm)))
(when (fp> tm 0.0)
;; This should really use a balanced tree:
(let loop ([tl ##sys#timeout-list] [prev #f])
@@ -407,19 +408,23 @@ EOF
((#t #:input) (fdset-add! fd #t #f))
((#f #:output) (fdset-add! fd #f #t))
((#:all) (fdset-add! fd #t #t))
- (else (panic "fdset-set: invalid i/o direction")))))
+ (else
+ (panic
+ (sprintf "fdset-set: invalid i/o direction: ~S (fd = ~S)" i/o fd))))))
(define (fdset-test inf outf i/o)
(case i/o
((#t #:input) inf)
((#f #:output) outf)
((#:all) (or inf outf))
- (else (panic "fdset-test: invalid i/o direction"))))
+ (else
+ (panic (sprintf "fdset-test: invalid i/o direction: ~S (i = ~S, o = ~S)"
+ i/o inf outf)))))
(define (##sys#thread-block-for-i/o! t fd i/o)
(dbg t " blocks for I/O " fd " in mode " i/o)
#;(unless (memq i/o '(#:all #:input #:output))
- (panic "##sys#thread-block-for-i/o!: invalid i/o mode"))
+ (panic (sprintf "##sys#thread-block-for-i/o!: invalid i/o mode: ~S" i/o)))
(let loop ([lst ##sys#fd-list])
(if (null? lst)
(set! ##sys#fd-list (cons (list fd t) ##sys#fd-list))
@@ -481,7 +486,7 @@ EOF
(##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"))
+ (panic (sprintf "thread is registered for I/O on unknown file-descriptor: ~S (expected ~S)" (car p) fd)))
((fdset-test inf outf (cdr p))
(when (##sys#slot t 4) ; also blocked for timeout?
(##sys#remove-from-timeout-list t))
Trap