Index: trunk/Ohana/src/opihi/pcontrol/StopHosts.c
===================================================================
--- trunk/Ohana/src/opihi/pcontrol/StopHosts.c	(revision 7917)
+++ trunk/Ohana/src/opihi/pcontrol/StopHosts.c	(revision 8296)
@@ -1,3 +1,19 @@
 # include "pcontrol.h"
+
+void DownHost (Host *host) {
+  CLOSE (host[0].stdin);
+  CLOSE (host[0].stdout);
+  CLOSE (host[0].stderr);
+  host[0].job = NULL;
+  PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM);
+}
+
+void OffHost (Host *host) {
+  CLOSE (host[0].stdin);
+  CLOSE (host[0].stdout);
+  CLOSE (host[0].stderr);
+  host[0].job = NULL;
+  PutHost (host, PCONTROL_HOST_OFF, STACK_BOTTOM);
+}
 
 int DownHosts () {
@@ -8,8 +24,5 @@
 
   stack = GetHostStack (PCONTROL_HOST_IDLE);
-  Nobject = stack[0].Nobject;
-
-  for (i = 0; i < Nobject; i++) {
-    host = GetStack (stack, STACK_TOP);
+  while ((host = PullStackByLocation (stack, STACK_BOTTOM)) != NULL) {
     StopHost (host);
     DownHost (host);
@@ -17,8 +30,5 @@
 
   stack = GetHostStack (PCONTROL_HOST_BUSY);
-  Nobject = stack[0].Nobject;
-
-  for (i = 0; i < Nobject; i++) {
-    host = GetStack (stack, STACK_TOP);
+  while ((host = PullStackByLocation (stack, STACK_BOTTOM)) != NULL) {
     StopHost (host);
     DownHost (host);
@@ -55,20 +65,5 @@
 }
 
-void DownHost (Host *host) {
-  CLOSE (host[0].stdin);
-  CLOSE (host[0].stdout);
-  CLOSE (host[0].stderr);
-  host[0].job = NULL;
-  PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM);
-}
-
-void OffHost (Host *host) {
-  CLOSE (host[0].stdin);
-  CLOSE (host[0].stdout);
-  CLOSE (host[0].stderr);
-  host[0].job = NULL;
-  PutHost (host, PCONTROL_HOST_OFF, STACK_BOTTOM);
-}
-
+/* the host is thought to be down; check for child exit status */
 int HarvestHost (int pid) {
   
