Hi Robin,
On Wed, 2009-02-04 at 16:20 +1100, Robin Garner wrote:
> Mark Wielaard wrote:
> > On Fri, 2008-12-19 at 14:20 +1100, Robin Garner wrote:
> >
> >> The clear() method of ThreadLocalMap leaves the map in an inconsistent
> >> state, causing errors during thread deletion in JikesRVM. Reported as
> >> Bug #38576 <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38576>. This
> >> patch amends the clear() method to put the map back in a consistent but
> >> empty state.
> >
> > I assume this happens because JikesRVM still has some ThreadLocals it
> > accesses itself after Thread dead. Or is there a way in which this could
> > show up (assuming the VM itself isn't using ThreadLocals to keep state)?
> >
> > Some nitpicks going over the ThreadLocalMap (nothing seems super
> > important and we can certainly apply your patch as is, but if you are
> > cleaning up anyway...):
>> [...]
> While I agree with most of the above, I'm obviously not finding time to
> incorporate your suggestions. Could we get the original patch into 0.98
> before the release ?
If it helps JikesRVM I am in favor. And it does seem to me completely
harmless otherwise. Original patch attached, but I let Andrew commit it
because he asked not to make any changes before the release.
Cheers,
Mark
--- ./components/classpath/97.2p7/classpath/java/lang/ThreadLocalMap.java 2008-12-09 17:35:48.000000000 +1100
+++ ./libraryInterface/Common/src/java/lang/ThreadLocalMap.java 2008-12-17 11:40:22.000000000 +1100
@@ -301,7 +301,9 @@
* Clear out the map. Done once during thread death.
*/
void clear() {
- entries = null;
+ this.entries = new Entry[1];
+ this.count = 0;
+ this.hashMask = 0;
}
/**