improve DEBUG_LEAKS handling and fix freeing some locs
This commit is contained in:
3
edit.c
3
edit.c
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#ifndef MKSH_NO_CMDLINE_EDITING
|
#ifndef MKSH_NO_CMDLINE_EDITING
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.264 2013/02/10 17:41:03 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.265 2013/02/10 19:05:36 tg Exp $");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* in later versions we might use libtermcap for this, but since external
|
* in later versions we might use libtermcap for this, but since external
|
||||||
@ -5451,6 +5451,7 @@ x_init(void)
|
|||||||
void
|
void
|
||||||
x_done(void)
|
x_done(void)
|
||||||
{
|
{
|
||||||
|
if (x_tab != NULL)
|
||||||
afreeall(AEDIT);
|
afreeall(AEDIT);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
21
main.c
21
main.c
@ -34,7 +34,7 @@
|
|||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.257 2013/02/10 18:17:30 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.258 2013/02/10 19:05:37 tg Exp $");
|
||||||
|
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
|
|
||||||
@ -955,7 +955,7 @@ quitenv(struct shf *shf)
|
|||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
yyrecursive_pop(true);
|
yyrecursive_pop(true);
|
||||||
if (ep->oenv && ep->oenv->loc != ep->loc)
|
while (ep->oenv && ep->oenv->loc != ep->loc)
|
||||||
popblock();
|
popblock();
|
||||||
if (ep->savefd != NULL) {
|
if (ep->savefd != NULL) {
|
||||||
for (fd = 0; fd < NUFILE; fd++)
|
for (fd = 0; fd < NUFILE; fd++)
|
||||||
@ -971,8 +971,6 @@ quitenv(struct shf *shf)
|
|||||||
* Either main shell is exiting or cleanup_parents_env() was called.
|
* Either main shell is exiting or cleanup_parents_env() was called.
|
||||||
*/
|
*/
|
||||||
if (ep->oenv == NULL) {
|
if (ep->oenv == NULL) {
|
||||||
struct block *l;
|
|
||||||
|
|
||||||
if (ep->type == E_NONE) {
|
if (ep->type == E_NONE) {
|
||||||
/* Main shell exiting? */
|
/* Main shell exiting? */
|
||||||
#if HAVE_PERSISTENT_HISTORY
|
#if HAVE_PERSISTENT_HISTORY
|
||||||
@ -999,17 +997,9 @@ quitenv(struct shf *shf)
|
|||||||
}
|
}
|
||||||
if (shf)
|
if (shf)
|
||||||
shf_close(shf);
|
shf_close(shf);
|
||||||
#ifdef DEBUG_LEAKS
|
|
||||||
l = e->loc;
|
|
||||||
while (l) {
|
|
||||||
afreeall(&l->area);
|
|
||||||
l = l->next;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
reclaim();
|
reclaim();
|
||||||
#ifdef DEBUG_LEAKS
|
#ifdef DEBUG_LEAKS
|
||||||
#ifndef MKSH_NO_CMDLINE_EDITING
|
#ifndef MKSH_NO_CMDLINE_EDITING
|
||||||
if (Flag(FTALKING))
|
|
||||||
x_done();
|
x_done();
|
||||||
#endif
|
#endif
|
||||||
afreeall(APERM);
|
afreeall(APERM);
|
||||||
@ -1074,6 +1064,13 @@ cleanup_proc_env(void)
|
|||||||
static void
|
static void
|
||||||
reclaim(void)
|
reclaim(void)
|
||||||
{
|
{
|
||||||
|
struct block *l;
|
||||||
|
|
||||||
|
while ((l = e->loc) && (!e->oenv || e->oenv->loc != l)) {
|
||||||
|
e->loc = l->next;
|
||||||
|
afreeall(&l->area);
|
||||||
|
}
|
||||||
|
|
||||||
remove_temps(e->temps);
|
remove_temps(e->temps);
|
||||||
e->temps = NULL;
|
e->temps = NULL;
|
||||||
afreeall(&e->area);
|
afreeall(&e->area);
|
||||||
|
Reference in New Issue
Block a user