Ethereal-dev: Re: [Ethereal-dev] G_malloc vs malloc
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
Ceyhun Seran wrote:
To avoid usage of g_malloc() which results crashes in ethereal, I
replaced all g_malloc() (about 3000 occurences) by malloc and
g_malloc0() by calloc. Because when the memory is allocated by a
g_malloc, it is not returned to system by calling g_free() and stays in
application free memory heap.
If you call g_free() on memory, that memory is handed to free(). free()
doesn't, in most if not all implementations, "return the memory to the
system" by making a system call; it just returns it to the free memory
pool used by malloc() (which, as Ulf Lamping notes, is what g_malloc()
calls).
The problem is, if this free memory is
tried to be allocated by another g_malloc(), ethereal crashes. (write error)
We have not seen that problem. I suspect most other applications using
GLib, including those using GTK+, haven't seen it either.
If there are errors in the code *using* g_malloc() and g_free(), you
might get those symptoms - but if there are errors in code using
malloc() and free(), you might get the same symptoms.
And my question is :
why didn't you limit the usage of g_malloc() or why didn't you replace
all g_malloc() by another suitable memory allocation function in actual
release?
Because replacing *all* of them means replacing GLib and GTK+ with a
package that doesn't use g_malloc(); as Ulf notes, GLib and GTK+
routines used by Ethereal use g_malloc().