Fix the memory leak. No really this time.
authorEric Andersen <andersen@codepoet.org>
Tue, 6 Mar 2001 22:17:29 +0000 (22:17 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 6 Mar 2001 22:17:29 +0000 (22:17 -0000)
 -Erik

lash.c
sh.c
shell/lash.c

diff --git a/lash.c b/lash.c
index b7c5ec5..72d8bb3 100644 (file)
--- a/lash.c
+++ b/lash.c
@@ -207,7 +207,7 @@ static char *local_pending_command = NULL;
 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 mark_closed(int fd)
 
 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 @@ int shell_main(int argc_l, char **argv_l)
        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 @@ int shell_main(int argc_l, char **argv_l)
        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 (file)
--- a/sh.c
+++ b/sh.c
@@ -207,7 +207,7 @@ static char *local_pending_command = NULL;
 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 mark_closed(int fd)
 
 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 @@ int shell_main(int argc_l, char **argv_l)
        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 @@ int shell_main(int argc_l, char **argv_l)
        last_return_code=-1;
        show_x_trace=FALSE;
 #endif
-#endif
 
        if (argv[0] && argv[0][0] == '-') {
                FILE *prof_input;
index b7c5ec5..72d8bb3 100644 (file)
@@ -207,7 +207,7 @@ static char *local_pending_command = NULL;
 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 mark_closed(int fd)
 
 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 @@ int shell_main(int argc_l, char **argv_l)
        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 @@ int shell_main(int argc_l, char **argv_l)
        last_return_code=-1;
        show_x_trace=FALSE;
 #endif
-#endif
 
        if (argv[0] && argv[0][0] == '-') {
                FILE *prof_input;