stack overflow interacts poorly with classloaders
stack at cs.utah.edu
Mon Jun 12 15:16:49 PDT 2000
> Just preload it once and for all and throw the same type in all threads,
> even those that run in a classloader context.
> This should be "close enough".
Kaffe already does this, the problem is when it tries to match this class
to the one in the catch clause. Specifically, line 603 in exception.c:
eptr[i].catch_type = getClass(eptr[i].catch_idx, ptr->class, &info);
We're trying to get a class (StackOverflowError) referenced in the
constant pool which hasn't necessarily been resolved yet. Eventually, it
gets to loadClass where it will ask the class loader to load the class,
and then poof. Preloading in this case means checking if a class
references StackOverflowError or any of its ancestors and then having the
class loader load them in, or we just treat them as "special classes" that
magically resolve to system classes regardless of the class loader.
> - Godmar
More information about the kaffe