aboutsummaryrefslogtreecommitdiffstats
path: root/extras
diff options
context:
space:
mode:
Diffstat (limited to 'extras')
-rw-r--r--extras/mini-os/blkfront.c2
-rw-r--r--extras/mini-os/fbfront.c15
-rw-r--r--extras/mini-os/netfront.c2
-rw-r--r--extras/mini-os/pcifront.c2
4 files changed, 13 insertions, 8 deletions
diff --git a/extras/mini-os/blkfront.c b/extras/mini-os/blkfront.c
index 9862fb9acb..f47aa69f23 100644
--- a/extras/mini-os/blkfront.c
+++ b/extras/mini-os/blkfront.c
@@ -289,7 +289,7 @@ void shutdown_blkfront(struct blkfront_dev *dev)
goto close;
}
state = xenbus_read_integer(path);
- if (state < XenbusStateClosed) {
+ while (state < XenbusStateClosed) {
err = xenbus_wait_for_state_change(path, &state, &dev->events);
if (err) free(err);
}
diff --git a/extras/mini-os/fbfront.c b/extras/mini-os/fbfront.c
index fa4fc428cc..6d2268e27e 100644
--- a/extras/mini-os/fbfront.c
+++ b/extras/mini-os/fbfront.c
@@ -262,7 +262,7 @@ void shutdown_kbdfront(struct kbdfront_dev *dev)
goto close_kbdfront;
}
state = xenbus_read_integer(path);
- if (state < XenbusStateClosed) {
+ while (state < XenbusStateClosed) {
err = xenbus_wait_for_state_change(path, &state, &dev->events);
if (err) free(err);
}
@@ -272,8 +272,10 @@ void shutdown_kbdfront(struct kbdfront_dev *dev)
XenbusStateInitialising, err);
goto close_kbdfront;
}
- // does not work yet.
- //xenbus_wait_for_value(path, "2", &dev->events);
+ err = NULL;
+ state = xenbus_read_integer(path);
+ while (err == NULL && (state < XenbusStateInitWait || state >= XenbusStateClosed))
+ err = xenbus_wait_for_state_change(path, &state, &dev->events);
close_kbdfront:
if (err) free(err);
@@ -660,8 +662,11 @@ void shutdown_fbfront(struct fbfront_dev *dev)
XenbusStateInitialising, err);
goto close_fbfront;
}
- // does not work yet
- //xenbus_wait_for_value(path, "2", &dev->events);
+
+ err = NULL;
+ state = xenbus_read_integer(path);
+ while (err == NULL && (state < XenbusStateInitWait || state >= XenbusStateClosed))
+ err = xenbus_wait_for_state_change(path, &state, &dev->events);
close_fbfront:
if (err) free(err);
diff --git a/extras/mini-os/netfront.c b/extras/mini-os/netfront.c
index 47f87d1eef..491876fd9a 100644
--- a/extras/mini-os/netfront.c
+++ b/extras/mini-os/netfront.c
@@ -546,7 +546,7 @@ void shutdown_netfront(struct netfront_dev *dev)
goto close;
}
state = xenbus_read_integer(path);
- if (state < XenbusStateClosed) {
+ while (state < XenbusStateClosed) {
err = xenbus_wait_for_state_change(path, &state, &dev->events);
if (err) free(err);
}
diff --git a/extras/mini-os/pcifront.c b/extras/mini-os/pcifront.c
index ccbef3f0e5..638fdb3966 100644
--- a/extras/mini-os/pcifront.c
+++ b/extras/mini-os/pcifront.c
@@ -354,7 +354,7 @@ void shutdown_pcifront(struct pcifront_dev *dev)
goto close_pcifront;
}
state = xenbus_read_integer(path);
- if (state < XenbusStateClosed) {
+ while (state < XenbusStateClosed) {
err = xenbus_wait_for_state_change(path, &state, &dev->events);
free(err);
}