>>>>> ":" == Ito Kazumitsu <[EMAIL PROTECTED]> writes:
:> I have found a bug in libltdl/ltdl.c. :> :> In argz_create_sep(), LT_DLMALLOC() allocates some memory. :> And in argz_append(), LT_DLREALLOC() tries to expand it. :> :> While LT_DLMALLOC() uses KMALLOC(), which does not call malloc(), :> LT_DLREALLOC() uses realloc(), which requires that the memory :> should have been allocated by malloc(). :> :> In ltdl.c, there is a code for realloc() enclosed in "##if 0 :> .. ##endif". I think this can be used if it is renamed as :> rpl_realloc. I think my patch posted last time is somewhat dirty. I found the patch attached below also works and looks better. I think lt_dlmalloc/lt_dlfree may well use malloc/free because on a platform which has its own argz_* functions, which seem to be in glibc, malloc/free seems to be used in argz_* functions. Anyway, I think this issue should be settled before the new release. --- kaffe/kaffevm/external.c.orig Fri Apr 25 04:36:20 2003 +++ kaffe/kaffevm/external.c Tue Jun 3 07:12:32 2003 @@ -53,6 +53,7 @@ #endif #ifndef LIBRARYINIT +/* rpl-realloc in ltdl.c must use malloc(); static inline lt_ptr_t kdlmalloc(size_t len) { void *ptr = KMALLOC(len); addToCounter(<mem, "vmmem-libltdl", 1, GCSIZEOF(ptr)); @@ -62,7 +63,8 @@ addToCounter(<mem, "vmmem-libltdl", 1, -((jlong)GCSIZEOF(ptr))); KFREE(ptr); } -#define LIBRARYINIT() ((lt_dlmalloc=kdlmalloc),(lt_dlfree=kdlfree),lt_dlinit()) +#define LIBRARYINIT() ((lt_dlmalloc=kdlmalloc),(lt_dlfree=kdlfree),lt_dlinit()) */ +#define LIBRARYINIT() ((lt_dlmalloc=malloc),(lt_dlfree=free),lt_dlinit()) #endif #ifndef LIBRARYSUFFIX _______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe