Hi,

(Not attaching to make it easier to view archives)

I have this test case:

---8<---
#!/bin/ksh93

# exec > test3.out 2>&1
unset PATH FPATH CDPATH

print "Test 3:  Alleges a memory leak:  unset is not properly freeing
members of an associative array"

alarm -r do_status +3
function do_status.alarm
{
    printf "%(%H:%M:%S)T  Iteration $i\n"
    /bin/ps -o vsz,pid,comm -p $$
}


typeset -A stuff

typeset -lui i=0
for (( i=0; i<1000000; i++ ))
do
    unset stuff[xyz]
    typeset -A stuff[xyz]
    stuff[xyz][elem0]="data0"
    stuff[xyz][elem1]="data1"
    stuff[xyz][elem2]="data2"
    stuff[xyz][elem3]="data3"
    stuff[xyz][elem4]="data4"
    stuff[xyz][elem5]="data5"
    stuff[xyz][elem6]="data6"
    stuff[xyz][elem7]="data7"
    stuff[xyz][elem8]="data8"
    stuff[xyz][elem9]="data9"
    stuff[xyz][elem9]="data9"
done
---8<---

It leaks every iteration. I found that using unset -f would
fix it, but the apparently proper patch would is:

---8<---
diff -up ksh-20120801/src/cmd/ksh93/bltins/typeset.c.orig
ksh-20120801/src/cmd/ksh93/bltins/typeset.c
--- ksh-20120801/src/cmd/ksh93/bltins/typeset.c.orig    2015-02-04
11:05:20.376445293 -0200
+++ ksh-20120801/src/cmd/ksh93/bltins/typeset.c    2015-02-04
11:05:23.781449724 -0200
@@ -1242,7 +1242,6 @@ static int unall(int argc, char **argv,
 #endif /* SHOPT_FIXEDARRAY */
                 {
                     r=1;
-                    continue;
                 }

                 if(shp->subshell)
---8<---

Any special reason for that continue, that I am missing?

Thanks,
Paulo
_______________________________________________
ast-users mailing list
ast-users@lists.research.att.com
http://lists.research.att.com/mailman/listinfo/ast-users

Reply via email to