summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--Src/Modules/zutil.c4
-rw-r--r--Src/jobs.c8
3 files changed, 19 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 985fefac0..a5258df4b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2002-08-08 Peter Stephenson <pws@csr.com>
+
+ * 17517: Src/jobs.c: Another memory leak was showing up with the
+ pwd field of the job structure, this attempts to rationalise it.
+
+ * 17516: Src/Modules/zutil.c: Memory leak with compiled patterns
+ for zstyle shown up by Felix's valgrind test.
+
2002-08-07 Clint Adams <clint@zsh.org>
* 17509: Completion/Unix/Command/_lynx: complete .xhtml files as well
diff --git a/Src/Modules/zutil.c b/Src/Modules/zutil.c
index 85ab4b394..cb099bbcc 100644
--- a/Src/Modules/zutil.c
+++ b/Src/Modules/zutil.c
@@ -119,7 +119,10 @@ setstypat(Style s, char *pat, Patprog prog, char **vals, int eval)
errflag = ef;
if (!eprog)
+ {
+ freepatprog(prog);
return 1;
+ }
eprog = dupeprog(eprog, 0);
}
@@ -134,6 +137,7 @@ setstypat(Style s, char *pat, Patprog prog, char **vals, int eval)
freeeprog(p->eval);
p->vals = zarrdup(vals);
p->eval = eprog;
+ freepatprog(prog);
return 0;
}
diff --git a/Src/jobs.c b/Src/jobs.c
index 548cdb923..a2dbea983 100644
--- a/Src/jobs.c
+++ b/Src/jobs.c
@@ -979,6 +979,10 @@ clearjobtab(int monitor)
zfree(jobtab[i].ty, sizeof(struct ttyinfo));
jobtab[i].ty = NULL;
}
+ if (jobtab[i].pwd) {
+ zsfree(jobtab[i].pwd);
+ jobtab[i].pwd = NULL;
+ }
if (monitor) {
/*
* See if there is a jobtable worth saving.
@@ -1011,8 +1015,10 @@ initjob(void)
for (i = 1; i < MAXJOB; i++)
if (!jobtab[i].stat) {
jobtab[i].stat = STAT_INUSE;
- if (jobtab[i].pwd)
+ if (jobtab[i].pwd) {
zsfree(jobtab[i].pwd);
+ jobtab[i].pwd = NULL;
+ }
jobtab[i].gleader = 0;
return i;
}