[kaffe] gc_free vs. KFREE
Marc Kleine-Budde
kleine-budde@gmx.de
Mon Mar 31 09:04:01 2003
On Mon, Mar 31, 2003 at 08:29:43AM -0800, Dalibor Topic wrote:
> Hi Marc,
>
> --- Marc Kleine-Budde <kleine-budde@gmx.de> wrote:
> >
> > My assumption is that KFREE clears the mem at once,
> > and gc_free marks
> > the mem to be freed by the garbage collector? Am I
> > right?
>
> AFAIK, KMALLOC/KFREE should be used for memory that
> does not go through the gc, while gc_malloc/gc_free
> should be used for the rest. Never mix the calls, or
> you'll be in big trouble. KMALLOC/KFREE leave memory
> management to the runtime library, while
> gc_malloc/gc_free do their own memory management.
Okay. Remeber never mix gc_* and K* calls. But if you have a look at the
CVS-sources $KAFFE/libraries/clib/native/ZipFile.c lines 26-36. The mem
for the str is alloced via KMALLOC, but later freed with gc_free. It
this a bug?
struct Hkaffe_util_Ptr*
java_util_zip_ZipFile_openZipFile0(Hjava_lang_String* fname)
{
jarFile* zip;
char* str;
str = checkPtr(stringJava2C(fname));
zip = openJarFile(str);
gc_free(str);
return ((struct Hkaffe_util_Ptr*)zip);
}
$KAFFE/kaffe/kaffevm/string.c 36-46
/*
* Convert a Java string into a KMALLOC()'d C string buffer.
*/
char*
stringJava2C(const Hjava_lang_String* js)
{
char* str;
str = KMALLOC(STRING_SIZE(js) + 1);
if (str != 0) {
stringJava2CBuf(js, str, STRING_SIZE(js) + 1);
}
return(str);
}
regards - Marc