[kaffe] java.lang.UnsatisfiedLinkError: not enough memory
Ito Kazumitsu
kaz@maczuka.gcd.org
Mon Jun 2 15:35:01 2003
>>>>> ":" == Ito Kazumitsu <kaz@maczuka.gcd.org> 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