summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fibers/epoll.scm9
1 files changed, 8 insertions, 1 deletions
diff --git a/fibers/epoll.scm b/fibers/epoll.scm
index 20d92ae..d4674a7 100644
--- a/fibers/epoll.scm
+++ b/fibers/epoll.scm
@@ -31,6 +31,7 @@
epoll?
epoll-add!
epoll-modify!
+ epoll-add*!
epoll-remove!
epoll-wake!
epoll
@@ -111,9 +112,15 @@
(define (epoll-add! epoll fd events)
(primitive-epoll-ctl (epoll-fd epoll) EPOLL_CTL_ADD fd events))
-(define* (epoll-modify! epoll fd events)
+(define (epoll-modify! epoll fd events)
(primitive-epoll-ctl (epoll-fd epoll) EPOLL_CTL_MOD fd events))
+(define (epoll-add*! epoll fd events)
+ (catch 'system-error
+ (lambda () (epoll-modify! epoll fd events))
+ (lambda _
+ (epoll-add! epoll fd events))))
+
(define (epoll-remove! epoll fd)
(primitive-epoll-ctl (epoll-fd epoll) EPOLL_CTL_DEL fd))