diff options
| author | Andy Wingo <wingo@pobox.com> | 2016-10-12 13:57:39 +0200 |
|---|---|---|
| committer | Andy Wingo <wingo@pobox.com> | 2016-10-12 13:57:39 +0200 |
| commit | 3c45a09a0b5eefd879547332510f9dd7e9fb509a (patch) | |
| tree | 6cbf2455f29733f2f548471b6258b54711175326 | |
| parent | Rework internals resume interface (diff) | |
| download | guile-fibers-3c45a09a0b5eefd879547332510f9dd7e9fb509a.tar.gz | |
Internals twiddles
* fibers/internal.scm (current-scheduler/public): Document.
(current-fiber/public): New accessor.
(resume-on-timer): Document.
* fibers.scm: Adapt to use current-fiber directly from the internals.
Remove kill-fiber.
| -rw-r--r-- | fibers.scm | 18 | ||||
| -rw-r--r-- | fibers/internal.scm | 16 |
2 files changed, 18 insertions, 16 deletions
@@ -24,17 +24,10 @@ #:use-module ((ice-9 ports internal) #:select (port-read-wait-fd port-write-wait-fd)) #:use-module (ice-9 suspendable-ports) - #:export ((get-current-fiber . current-fiber) - run-fibers - spawn-fiber - kill-fiber) - #:re-export (sleep)) - -;; A thunk and not a parameter to prevent users from using it as a -;; parameter. -(define (get-current-fiber) - "Return the current fiber, or @code{#f} if no fiber is current." - (current-fiber)) + #:export (run-fibers + spawn-fiber) + #:re-export (current-fiber + sleep)) (define (wait-for-readable port) (suspend-current-fiber @@ -71,6 +64,3 @@ (define* (spawn-fiber thunk #:optional (sched (require-current-scheduler))) (create-fiber sched thunk)) - -(define (kill-fiber fiber) - (pk 'unimplemented-kill-fiber fiber)) diff --git a/fibers/internal.scm b/fibers/internal.scm index a74bc0f..991f47b 100644 --- a/fibers/internal.scm +++ b/fibers/internal.scm @@ -40,7 +40,7 @@ resume-on-timer create-fiber - current-fiber + (current-fiber/public . current-fiber) kill-fiber fiber-scheduler fiber-continuation @@ -148,13 +148,19 @@ some other kernel thread." ((scheduler-kernel-thread sched))) (define current-scheduler (make-parameter #f)) -(define (current-scheduler/public) (current-scheduler)) +(define (current-scheduler/public) + "Return the current scheduler, or @code{#f} if no scheduler is +current." + (current-scheduler)) (define (make-source events expiry fiber) (vector events expiry fiber)) (define (source-events s) (vector-ref s 0)) (define (source-expiry s) (vector-ref s 1)) (define (source-fiber s) (vector-ref s 2)) (define current-fiber (make-parameter #f)) +(define (current-fiber/public) + "Return the current fiber, or @code{#f} if no fiber is current." + (current-fiber)) (define (schedule-fiber! fiber thunk) ;; The fiber will be resumed at most once, and we are the ones that @@ -371,6 +377,12 @@ becomes writable." (resume-on-fd-events fd EPOLLOUT fiber)) (define (resume-on-timer fiber expiry get-thunk) + "Arrange to resume @var{fiber} when the absolute real time is +greater than or equal to @var{expiry}, expressed in internal time +units. The fiber will be resumed with the result of calling +@var{get-thunk}. If @var{get-thunk} returns @code{#f}, that indicates +that some other operation performed this operation first, and so no +resume is performed." (let ((sched (fiber-scheduler fiber))) (define (maybe-resume) (let ((thunk (get-thunk))) |
