Fix the memory leak.  No really this time.
 -Erik
diff --git a/lash.c b/lash.c
index b7c5ec5..72d8bb3 100644
--- a/lash.c
+++ b/lash.c
@@ -207,7 +207,7 @@
 static struct jobset job_list = { NULL, NULL };
 static int argc;
 static char **argv;
-static struct close_me *close_me_head = NULL;
+static struct close_me *close_me_head;
 #ifdef BB_FEATURE_SH_ENVIRONMENT
 static int last_bg_pid=-1;
 static int last_return_code=-1;
@@ -631,9 +631,12 @@
 
 static void close_all()
 {
-	struct close_me *c;
-	for (c=close_me_head; c; c=c->next) {
-		mark_closed(c->fd);
+	int i=0;
+	struct close_me *c, *tmp;
+	for (c=close_me_head; c; c=tmp) {
+		close(c->fd);
+		tmp=c->next;
+		free(c);
 	}
 	close_me_head = NULL;
 }
@@ -1713,11 +1716,11 @@
 	argc = argc_l;
 	argv = argv_l;
 
+	/* These variables need re-initializing when recursing */
 	shell_context = 0;
 	cwd=NULL;
-#ifdef BB_FEATURE_SH_STANDALONE_SHELL
-	/* These variables need re-initializing when recursing */
 	local_pending_command = NULL;
+	close_me_head = NULL;
 	job_list.head = NULL;
 	job_list.fg = NULL;
 #ifdef BB_FEATURE_SH_ENVIRONMENT
@@ -1725,7 +1728,6 @@
 	last_return_code=-1;
 	show_x_trace=FALSE;
 #endif
-#endif
 
 	if (argv[0] && argv[0][0] == '-') {
 		FILE *prof_input;
diff --git a/sh.c b/sh.c
index b7c5ec5..72d8bb3 100644
--- a/sh.c
+++ b/sh.c
@@ -207,7 +207,7 @@
 static struct jobset job_list = { NULL, NULL };
 static int argc;
 static char **argv;
-static struct close_me *close_me_head = NULL;
+static struct close_me *close_me_head;
 #ifdef BB_FEATURE_SH_ENVIRONMENT
 static int last_bg_pid=-1;
 static int last_return_code=-1;
@@ -631,9 +631,12 @@
 
 static void close_all()
 {
-	struct close_me *c;
-	for (c=close_me_head; c; c=c->next) {
-		mark_closed(c->fd);
+	int i=0;
+	struct close_me *c, *tmp;
+	for (c=close_me_head; c; c=tmp) {
+		close(c->fd);
+		tmp=c->next;
+		free(c);
 	}
 	close_me_head = NULL;
 }
@@ -1713,11 +1716,11 @@
 	argc = argc_l;
 	argv = argv_l;
 
+	/* These variables need re-initializing when recursing */
 	shell_context = 0;
 	cwd=NULL;
-#ifdef BB_FEATURE_SH_STANDALONE_SHELL
-	/* These variables need re-initializing when recursing */
 	local_pending_command = NULL;
+	close_me_head = NULL;
 	job_list.head = NULL;
 	job_list.fg = NULL;
 #ifdef BB_FEATURE_SH_ENVIRONMENT
@@ -1725,7 +1728,6 @@
 	last_return_code=-1;
 	show_x_trace=FALSE;
 #endif
-#endif
 
 	if (argv[0] && argv[0][0] == '-') {
 		FILE *prof_input;
diff --git a/shell/lash.c b/shell/lash.c
index b7c5ec5..72d8bb3 100644
--- a/shell/lash.c
+++ b/shell/lash.c
@@ -207,7 +207,7 @@
 static struct jobset job_list = { NULL, NULL };
 static int argc;
 static char **argv;
-static struct close_me *close_me_head = NULL;
+static struct close_me *close_me_head;
 #ifdef BB_FEATURE_SH_ENVIRONMENT
 static int last_bg_pid=-1;
 static int last_return_code=-1;
@@ -631,9 +631,12 @@
 
 static void close_all()
 {
-	struct close_me *c;
-	for (c=close_me_head; c; c=c->next) {
-		mark_closed(c->fd);
+	int i=0;
+	struct close_me *c, *tmp;
+	for (c=close_me_head; c; c=tmp) {
+		close(c->fd);
+		tmp=c->next;
+		free(c);
 	}
 	close_me_head = NULL;
 }
@@ -1713,11 +1716,11 @@
 	argc = argc_l;
 	argv = argv_l;
 
+	/* These variables need re-initializing when recursing */
 	shell_context = 0;
 	cwd=NULL;
-#ifdef BB_FEATURE_SH_STANDALONE_SHELL
-	/* These variables need re-initializing when recursing */
 	local_pending_command = NULL;
+	close_me_head = NULL;
 	job_list.head = NULL;
 	job_list.fg = NULL;
 #ifdef BB_FEATURE_SH_ENVIRONMENT
@@ -1725,7 +1728,6 @@
 	last_return_code=-1;
 	show_x_trace=FALSE;
 #endif
-#endif
 
 	if (argv[0] && argv[0][0] == '-') {
 		FILE *prof_input;