From f2ed2d7b32a2b1e1cf5e5e0e2bd92f3d66c3d264 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Wed, 15 Feb 2017 21:11:52 +0100 Subject: Add epoll-add*! * fibers/epoll.scm (epoll-add*!): New function, tries an epoll-modify! then falls back to epoll-add!. --- fibers/epoll.scm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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)) -- cgit v1.2.3