[Mplayer-cvslog] CVS: main m_option.c,1.5,1.6

Alban Bedel albeu at free.fr
Tue Feb 11 20:34:19 CET 2003


Hi Arpi of Ize,

on Thu, 30 Jan 2003 22:28:17 +0100 you wrote:

> Update of /cvsroot/mplayer/main
> In directory mail:/var/tmp.root/cvs-serv30703
> 
> Modified Files:
> 	m_option.c 
> Log Message:
> disable free() in string and string_list parsers. yes, it's a hack
> (and a little memleak), but i can explain :)
> [note it's just a few kB memleak, but it's the price of stability
> without full code review/audit - there are hunderds of possible double
> free()]
> 
> the old config parser didn't free() strings/stringlists, but didn't even
> allocate them by default. the new one always free(), and it causes
> memcorruption/sig11 at cases like this:
> 
> char* dvd_device="/dev/dvd";
>         {"dvd-device", &dvd_device,  CONF_TYPE_STRING, 0, 0, 0, NULL},
> 
> since string constansts (allocated in .TEXT segment) cannot be free()'d
> 

Hi,

ok let me clarify this a bit. Some kind of options type have to be handled with
dynamic memory, like strings, etc. I wanted to avoid (if possible) any memory
leak, but came the problem that you are pointing out here, static vs. dynamic.
The example you show shouldn't cause any trouble as on init (ie when options
are registered) any non-NULL value will be replaced by a dynamic copy so
you can still use static values for the default values.
But after that if you assign a value to such an option it MUST be dynamicly
allocated and you should free the current value if non-NULL.
Anyway I should look at this if it still isn't fixed.
	Albeu


More information about the MPlayer-cvslog mailing list