[kaffe] Bug Report: StackOverflowError and Collections
Jim Pick
jim@kaffe.org
Tue Sep 2 21:47:02 2003
On Tue, 2 Sep 2003 19:49:38 -0700
Jim Pick <jim@kaffe.org> wrote:
> On Fri, 29 Aug 2003 18:14:00 -0700
> "Jim Pick" <jim@kaffe.org> wrote:
>
> > Hi,
> >
> > I'm running into problems building ant from CVS (4/28/2003 00:00 UTC),
> > on an x86 Linux machine with the defaults (jthreads/jit3). It fails
> > like this:
> >
> > ... Building Ant Distribution
> > Buildfile: build.xml
> >
> > BUILD FAILED
> > java.lang.StackOverflowError
> > <<No stacktrace available>>
> >
> > Total time: 0 seconds
> > java.lang.StackOverflowError
> > <<No stacktrace available>>
> > ... Failed Building Ant Distribution !
> >
> > It used to work. I chased it down to this particular change (the
> > Classpath Collections merge). I tried increasing the stack size using
> > the -ss option, but it didn't seem to help.
> >
> > I'll try to debug this when I get time, but I thought I'd report it
> > first.
>
> Okay, I did some more legwork, and it appears that the problem appears
> because Ant creates a subclass of Hashtable called
> org.apache.tools.ant.util.LazyHashtable, which worked nicely with our
> old implementation of Hashtable, but not with the new Classpath-based
> implementation of Hashtable.
>
> Basically, LazyHashtable.contains(Object value) calls
> super.contains(Object value) in Hashtable, which in Classpath's
> implementation, calls Hashtable.containsValue(Object value).
> Unfortunately, LazyHashTable.containsValue(Ojbect value) overrides that,
> just calling calling LazyHashTable.contains(Object value) again, and we
> have a loop.
>
> I'd post a snippet of the stack trace, but I had to use gdb and
> -Xxdebug, so all the symbols are mangled and it's ugly. :-)
>
> The old Kaffe implementation of Hashtable didn't have the problem, since
> it used a private HashMap, compare below:
>
> LazyHashtable:
>
> http://cvs.apache.org/viewcvs/ant/src/main/org/apache/tools/ant/util/LazyHashtable.java?rev=1.6&content-type=text/vnd.viewcvs-markup
>
> Classpath's Hashtable
>
> http://savannah.gnu.org/cgi-bin/viewcvs/classpath/classpath/java/util/Hashtable.java?rev=1.28&content-type=text/vnd.viewcvs-markup
>
> Our old Hashtable:
>
> http://www.kaffe.org/cgi-bin/viewcvs.cgi/kaffe/libraries/javalib/java/util/Hashtable.java?rev=1.26&content-type=text/vnd.viewcvs-markup
>
> I don't know if Kaffe's old Hashtable implementation is more proper or
> not, but at least it worked. :-)
>
> I'll cc: this to the classpath list.
Oops, I must have left off the cc:, trying again.
Cheers,
- Jim