diff options
author | phk <phk@FreeBSD.org> | 2003-05-01 19:43:52 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2003-05-01 19:43:52 +0000 |
commit | 26e81abf93d18e6e2a41299a4bae47bc2a7441f1 (patch) | |
tree | b0072947c6d62c4d28c6ad41608628d33541cf5f /sys/geom/geom_event.c | |
parent | 1c2eb6f7c38f4c607cff4b7e7fe99a3ff5cf47ad (diff) | |
download | FreeBSD-src-26e81abf93d18e6e2a41299a4bae47bc2a7441f1.zip FreeBSD-src-26e81abf93d18e6e2a41299a4bae47bc2a7441f1.tar.gz |
Add a new flag, EV_CANCELED, and use it to make g_waitfor_event() return
EAGAIN if an event got canceled.
Diffstat (limited to 'sys/geom/geom_event.c')
-rw-r--r-- | sys/geom/geom_event.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/geom/geom_event.c b/sys/geom/geom_event.c index c0ec8e1..c7ba1c3 100644 --- a/sys/geom/geom_event.c +++ b/sys/geom/geom_event.c @@ -72,6 +72,7 @@ struct g_event { #define EV_DONE 0x80000 #define EV_WAKEUP 0x40000 +#define EV_CANCELED 0x20000 void g_waitidle(void) @@ -230,6 +231,7 @@ g_cancel_event(void *ref) ep->func(ep->arg, EV_CANCEL); if (ep->flag & EV_WAKEUP) { ep->flag |= EV_DONE; + ep->flag |= EV_CANCELED; wakeup(ep); } else { g_destroy_event(ep); @@ -310,8 +312,10 @@ g_waitfor_event(g_event_t *func, void *arg, int flag, ...) do tsleep(ep, PRIBIO, "g_waitfor_event", hz); while (!(ep->flag & EV_DONE)); + if (ep->flag & EV_CANCELED) + error = EAGAIN; g_destroy_event(ep); - return (0); + return (error); } void |