Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Associative arrays and memory
- X-seq: zsh-workers 4625
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxx>
- To: Peter Stephenson <pws@xxxxxxxxxxxxxxxxx>, zsh-workers@xxxxxxxxxxxxxxx (Zsh hackers list)
- Subject: Re: Associative arrays and memory
- Date: Fri, 13 Nov 1998 09:57:17 -0800
- In-reply-to: <9811131616.AA30250@xxxxxxxxxxxxxxxxx>
- References: <9811131616.AA30250@xxxxxxxxxxxxxxxxx>
On Nov 13, 5:16pm, Peter Stephenson wrote:
} Subject: Associative arrays and memory
}
} It does seem the existing ztrdup()'s in what's now copyparam() are
} memory leaks. This will need fixing in any case, independently from
} assoc arrays.
I'm not so sure any more. When restore_params() is called, it uses the
pm->sets functions to assign directly to the struct param already in the
paramtab. So that memory is now owned by the paramtab and should be
freed when the param next becomes unset ... right?
} However, it looks like the only purpose of copyparam() is simply to
} save special parameters and only in the following case:
} foo=bar some-builtin
} to restore $foo (it's separate from the usual local restore mechanism).
I appear to have broken it somehow, then:
zagzig<17> HISTSIZE=1000
zagzig<18> HISTSIZE=0 echo hello
hello
zagzig<19> echo $HISTSIZE
2
Nonspecial variables work:
zagzig<23> FOO=before
zagzig<24> FOO=after echo hello
hello
zagzig<25> echo $FOO
before
} There are currently no special assoc arrays, of course, and it should
} probably be possible to prevent there being any
What about the discussion that started all this -- using an associative
array to give user access to shell-internal completion data?
} So I'd recommend removing all references to assoc
} arrays from copyparam(), i.e. putting that part of the code back how
} it was, maybe with a
} DPUTS(PM_TYPE(pm->flags) == PM_HASHED, "attempt to copy assoc array")
} to be on the safe side.
}
} Combining that with my other suggestion of separating assoc array
} returns out of getaparam() would be a big help in warding off possible
} memory leaks. (Unless `shift hash', which is where getaparam() comes
} in, is really supposed to work? It does something at the moment, but
} what does it mean --- randomly remove element from hash?? Same goes
} for the call in `set -A': there's no point getting an array only to
} find you can't set it because it's the wrong type.)
If you have time and inclination, please go ahead and do this. I'm not
going to be able to work on it again until tomorrow at the earliest.
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Messages sorted by:
Reverse Date,
Date,
Thread,
Author