summaryrefslogtreecommitdiff
path: root/fibers.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2016-10-12 13:33:05 +0200
committerAndy Wingo <wingo@pobox.com>2016-10-12 13:33:05 +0200
commitbfef07a558cec40824d1af5332d68021c049fadb (patch)
tree7a73e800312a6c459f90efececa141d2ed578d78 /fibers.scm
parentUpdate documentation. (diff)
downloadguile-fibers-bfef07a558cec40824d1af5332d68021c049fadb.tar.gz
Rework internals resume interface
* fibers/internal.scm (resume-on-fd-events, resume-on-readable-fd) (resume-on-writable-fd, resume-on-timer): Rework primitive resume interface. * fibers.scm: * fibers/timers.scm: Adapt users.
Diffstat (limited to 'fibers.scm')
-rw-r--r--fibers.scm16
1 files changed, 6 insertions, 10 deletions
diff --git a/fibers.scm b/fibers.scm
index ffdb251..b3ebd6b 100644
--- a/fibers.scm
+++ b/fibers.scm
@@ -18,7 +18,6 @@
;;;;
(define-module (fibers)
- #:use-module (fibers epoll)
#:use-module (fibers internal)
#:use-module (fibers repl)
#:use-module (fibers timers)
@@ -37,17 +36,14 @@
"Return the current fiber, or @code{#f} if no fiber is current."
(current-fiber))
-(define (wait-for-events port fd events)
- (let ((revents (suspend-current-fiber
- (lambda (fiber)
- (add-fd-events! (fiber-scheduler fiber) fd events fiber)))))
- (unless (zero? (logand revents EPOLLERR))
- (error "error reading from port" port))))
-
(define (wait-for-readable port)
- (wait-for-events port (port-read-wait-fd port) (logior EPOLLIN EPOLLRDHUP)))
+ (suspend-current-fiber
+ (lambda (fiber)
+ (resume-on-readable-fd (port-read-wait-fd port) fiber))))
(define (wait-for-writable port)
- (wait-for-events port (port-write-wait-fd port) EPOLLOUT))
+ (suspend-current-fiber
+ (lambda (fiber)
+ (resume-on-writable-fd (port-read-wait-fd port) fiber))))
(define* (run-fibers #:optional (init #f)
#:key (scheduler (make-scheduler))