summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2016-10-12 13:57:39 +0200
committerAndy Wingo <wingo@pobox.com>2016-10-12 13:57:39 +0200
commit3c45a09a0b5eefd879547332510f9dd7e9fb509a (patch)
tree6cbf2455f29733f2f548471b6258b54711175326
parentRework internals resume interface (diff)
downloadguile-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.scm18
-rw-r--r--fibers/internal.scm16
2 files changed, 18 insertions, 16 deletions
diff --git a/fibers.scm b/fibers.scm
index b3ebd6b..63873bd 100644
--- a/fibers.scm
+++ b/fibers.scm
@@ -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)))