summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_event.c
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2003-05-01 19:43:52 +0000
committerphk <phk@FreeBSD.org>2003-05-01 19:43:52 +0000
commit26e81abf93d18e6e2a41299a4bae47bc2a7441f1 (patch)
treeb0072947c6d62c4d28c6ad41608628d33541cf5f /sys/geom/geom_event.c
parent1c2eb6f7c38f4c607cff4b7e7fe99a3ff5cf47ad (diff)
downloadFreeBSD-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.c6
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
OpenPOWER on IntegriCloud