mini-os: Fix frontend shutdown wait loop
minios frontends must wait for backends to be shut down and
reinitialized before freeing resources.
Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx>
diff -r adce8bc43fcc extras/mini-os/blkfront.c
--- a/extras/mini-os/blkfront.c Tue Apr 06 07:16:47 2010 +0100
+++ b/extras/mini-os/blkfront.c Tue Apr 06 22:35:30 2010 +0200
@@ -289,7 +289,7 @@
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 -r adce8bc43fcc extras/mini-os/fbfront.c
--- a/extras/mini-os/fbfront.c Tue Apr 06 07:16:47 2010 +0100
+++ b/extras/mini-os/fbfront.c Tue Apr 06 22:35:30 2010 +0200
@@ -262,7 +262,7 @@
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 @@
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 @@
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 -r adce8bc43fcc extras/mini-os/netfront.c
--- a/extras/mini-os/netfront.c Tue Apr 06 07:16:47 2010 +0100
+++ b/extras/mini-os/netfront.c Tue Apr 06 22:35:30 2010 +0200
@@ -546,7 +546,7 @@
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 -r adce8bc43fcc extras/mini-os/pcifront.c
--- a/extras/mini-os/pcifront.c Tue Apr 06 07:16:47 2010 +0100
+++ b/extras/mini-os/pcifront.c Tue Apr 06 22:35:30 2010 +0200
@@ -354,7 +354,7 @@
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);
}
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|