stack overflow interacts poorly with classloaders
Jason Baker
kaffe@rufus.w3.org
12 Jun 2000 17:57:53 -0600
Patrick Tullmann <tullmann@cs.utah.edu> writes:
> Tim Stack wrote:
> > 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.
>
> I'm not sure if that's sufficient. For example this code:
>
>
> ...
> try {
> wasteLotsofStackSpace();
> } catch (SomeAppSpecificException i) {
> ...
> }
> ...
>
> may still invoke the ClassLoader and call out into Java code in the
> exception dispatching path.
>
> The problem is really that the exception dispatch path may wander out
> into arbitrary Java code (via loadClass()).
>
> It seems to me that the solution is to make sure that all Class names
> referenced in a catch clause are resolved before any code in the
> corresponding try block is executed. Can we just get away with making
> sure all class names referenced in a catch block are resolved when the
> method is compiled?
That seems fair, since the JVM is supposed to check that they are <:
Throwable anyway. As for classes loaded by the catch body, is this
really a problem? Once a StackOverflow has been dispatched, we
should be able to throw a new one and make progress.
Jason