~ chicken-core (chicken-5) 580d44f6c885872fe446ea263385b1fcd75eed5b


commit 580d44f6c885872fe446ea263385b1fcd75eed5b
Author:     Peter Bex <peter@more-magic.net>
AuthorDate: Mon Apr 30 20:54:28 2018 +0200
Commit:     Kooda <kooda@upyum.com>
CommitDate: Mon Apr 30 21:33:16 2018 +0200

    Convert timeout to an exact number of milliseconds before sleeping
    
    This fixes a segfault in the C_ready_fds_timeout code that expected an
    unsigned integer.  We get a segfault instead of an exception because
    scheduler.scm has (declare (unsafe)) at the top.
    
    Fixes #1459
    
    Signed-off-by: Kooda <kooda@upyum.com>

diff --git a/scheduler.scm b/scheduler.scm
index 6cb8cc56..b9710488 100644
--- a/scheduler.scm
+++ b/scheduler.scm
@@ -457,6 +457,7 @@ EOF
 	 (rq? (pair? ready-queue-head))
 	 (tmo (if (and to? (not rq?)) ; no thread was unblocked by timeout, so wait
 		  (let* ((tmo1 (caar ##sys#timeout-list))
+			 (tmo1 (inexact->exact (round tmo1)))
 			 (now (##core#inline_allocate ("C_a_i_current_milliseconds" 7) #f)))
 		    (max 0 (- tmo1 now)) )
 		  0))) ; otherwise immediate timeout.
Trap