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;