From: Nikodemus S. <nik...@ra...> - 2011-02-12 15:38:44
|
1.0.45.24: minor MAKE-TIMER cleanups Patch by Brit Butler, lp#672252. * Improve the docstring for SB-EXT:MAKE-TIMER. * Add a minor comment to unschedule-timer. ...with minor edits by yours truly, including dropping the bogus SCHEDULE-TIMER change from the original patch. Index: version.lisp-expr =================================================================== RCS file: /cvsroot/sbcl/sbcl/version.lisp-expr,v retrieving revision 1.5171 diff -u -r1.5171 version.lisp-expr --- version.lisp-expr 12 Feb 2011 15:22:25 -0000 1.5171 +++ version.lisp-expr 12 Feb 2011 15:25:53 -0000 @@ -20,4 +20,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.45.23" +"1.0.45.24" Index: src/code/timer.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/timer.lisp,v retrieving revision 1.19 diff -u -r1.19 timer.lisp --- src/code/timer.lisp 30 Sep 2010 08:39:39 -0000 1.19 +++ src/code/timer.lisp 12 Feb 2011 15:25:53 -0000 @@ -156,14 +156,15 @@ (defun make-timer (function &key name (thread sb!thread:*current-thread*)) #!+sb-doc - "Create a timer object that's when scheduled runs FUNCTION. If -THREAD is a thread then that thread is to be interrupted with -FUNCTION. If THREAD is T then a new thread is created each timer -FUNCTION is run. If THREAD is NIL then FUNCTION can be run in any -thread. When THREAD is not T, INTERRUPT-THREAD is used to run FUNCTION -and the ordering guarantees of INTERRUPT-THREAD also apply here. -FUNCTION always runs with interrupts disabled but WITH-INTERRUPTS is -allowed." + "Create a timer that runs FUNCTION when triggered. + +If a THREAD is supplied, FUNCTION is run in that thread. If THREAD is +T, a new thread is created for FUNCTION each time the timer is +triggered. If THREAD is NIL, FUNCTION is run in an unspecified thread. + +When THREAD is not T, INTERRUPT-THREAD is used to run FUNCTION and the +ordering guarantees of INTERRUPT-THREAD apply. FUNCTION runs with +interrupts disabled but WITH-INTERRUPTS is allowed." (%make-timer :name name :function function :thread thread)) (defun timer-name (timer) @@ -285,6 +286,8 @@ (setf (%timer-expire-time timer) nil (%timer-repeat-interval timer) nil) (let ((old-position (priority-queue-remove *schedule* timer))) + ;; Don't use cancel-function as the %timer-cancel-function + ;; may have changed before we got the scheduler lock. (when old-position (funcall (%timer-cancel-function timer))) (when (eql 0 old-position) |