~ chicken-core (chicken-5) 4491642ff234403483f39937467b4fdd1ce9a028


commit 4491642ff234403483f39937467b4fdd1ce9a028
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Wed Aug 28 22:07:30 2013 +0200
Commit:     Peter Bex <peter.bex@xs4all.nl>
CommitDate: Fri Aug 30 13:57:47 2013 +0200

    debugging output for finalizer-management blindly wrote to stdout, which could interfere with code that uses with-output-to-string, for example.
    
    Signed-off-by: Peter Bex <peter.bex@xs4all.nl>

diff --git a/library.scm b/library.scm
index e01e8688..5c101e32 100644
--- a/library.scm
+++ b/library.scm
@@ -4704,32 +4704,48 @@ EOF
 (define ##sys#set-finalizer! (##core#primitive "C_register_finalizer"))
 
 (define set-finalizer! 
-  (lambda (x y)
-    (when (fx>= (##sys#fudge 26) _max_pending_finalizers)
-      (if (##core#inline "C_resize_pending_finalizers" (fx* 2 _max_pending_finalizers))
-	  (begin
-	    (set! ##sys#pending-finalizers (##sys#grow-vector ##sys#pending-finalizers
-							      (fx+ (fx* 2 _max_pending_finalizers) 1)
-							      (##core#undefined)))
-	    (when (##sys#fudge 13)
-	      (print "[debug] too many finalizers (" (##sys#fudge 26)
-		     "), resized max finalizers to " _max_pending_finalizers "...") ) )
-	  (begin
-	    (when (##sys#fudge 13)
-	      (print "[debug] too many finalizers (" (##sys#fudge 26) "), forcing ...") )
-	    (##sys#force-finalizers) ) ) )
-    (##sys#set-finalizer! x y) ) )
+  (let ((string-append string-append))
+    (lambda (x y)
+      (when (fx>= (##sys#fudge 26) _max_pending_finalizers)
+	(cond ((##core#inline "C_resize_pending_finalizers" (fx* 2 _max_pending_finalizers))
+	       (set! ##sys#pending-finalizers (##sys#grow-vector ##sys#pending-finalizers
+								 (fx+ (fx* 2 _max_pending_finalizers) 1)
+								 (##core#undefined)))
+	       (when (##sys#fudge 13)
+		 (##sys#print 
+		  (string-append
+		   "[debug] too many finalizers (" 
+		   (##sys#number->string (##sys#fudge 26))
+		   "), resized max finalizers to "
+		   (##sys#number->string _max_pending_finalizers)
+		   "\n")
+		  #f ##sys#standard-error)))
+	      (else
+	       (when (##sys#fudge 13)
+		 (##sys#print 
+		  (string-append
+		   "[debug] too many finalizers ("
+		   (##sys#fudge 26)
+		   "), forcing ...\n")
+		  #f ##sys#standard-error))
+	       (##sys#force-finalizers) ) ) )
+      (##sys#set-finalizer! x y) ) ) )
 
 (define ##sys#run-pending-finalizers
-  (let ([vector-fill! vector-fill!]
-	[working #f] )
+  (let ((vector-fill! vector-fill!)
+	(string-append string-append)
+	(working #f) )
     (lambda (state)
       (unless working
 	(set! working #t)
 	(let* ((c (##sys#slot ##sys#pending-finalizers 0)) )
 	  (when (##sys#fudge 13)
-	    (print "[debug] running " c " finalizer(s) (" (##sys#fudge 26) " live, "
-		   (##sys#fudge 27) " allocated) ..."))
+	    (##sys#print 
+	     (string-append "[debug] running " (##sys#number->string c)
+			    " finalizer(s) (" (##sys#number->string (##sys#fudge 26))
+			    " live, " (##sys#number->string (##sys#fudge 27))
+			    " allocated) ...\n")
+	     #f ##sys#standard-error))
 	  (do ([i 0 (fx+ i 1)])
 	      ((fx>= i c))
 	    (let ([i2 (fx+ 1 (fx* i 2))])
Trap