summaryrefslogtreecommitdiff
path: root/fibers.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2016-09-02 09:01:34 +0200
committerAndy Wingo <wingo@pobox.com>2016-09-02 09:01:34 +0200
commitaeb38b4e53cf71b283dabcff253111f1b2ecf2c1 (patch)
tree6153053a3f0c9745270b694373bad28010fa4c21 /fibers.scm
parentReadability refactors to fibers.scm (diff)
downloadguile-fibers-aeb38b4e53cf71b283dabcff253111f1b2ecf2c1.tar.gz
Slight internal refactor
* fibers.scm (run): Inline `next-fiber' into its only use.
Diffstat (limited to 'fibers.scm')
-rw-r--r--fibers.scm26
1 files changed, 12 insertions, 14 deletions
diff --git a/fibers.scm b/fibers.scm
index 46b7bbb..b1c1435 100644
--- a/fibers.scm
+++ b/fibers.scm
@@ -150,18 +150,6 @@
(resume fiber (lambda () 0) ctx))
wakers)))))))
-(define (next-fiber ctx)
- (let lp ()
- (let ((runnables (scheduler-runnables ctx)))
- (cond
- ((pair? runnables)
- (let ((fiber (car runnables)))
- (set-scheduler-runnables! ctx (cdr runnables))
- fiber))
- (else
- (poll-for-events ctx)
- (lp))))))
-
(define (run-fiber ctx fiber)
(when (eq? (fiber-state fiber) 'runnable)
(parameterize ((current-fiber fiber))
@@ -216,8 +204,18 @@
(current-read-waiter wait-for-readable)
(current-write-waiter wait-for-writable))
(let lp ()
- (run-fiber ctx (next-fiber ctx))
- (lp))))
+ (let ((runnables (scheduler-runnables ctx)))
+ (cond
+ ((pair? runnables)
+ (let ((fiber (car runnables)))
+ (set-scheduler-runnables! ctx (cdr runnables))
+ (run-fiber ctx fiber)
+ (lp)))
+ ((poll-for-events ctx)
+ (lp))
+ (else
+ ;; Nothing runnable; quit.
+ (values)))))))
(define* (spawn thunk #:optional (ctx (ensure-current-scheduler)))
(create-fiber ctx thunk))