[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] mini-os: Fix frontend shutdown wait loop



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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.