--- Steve Loughran <[EMAIL PROTECTED]> wrote:

> Matt Benson wrote:
> > --- Steve Loughran <[EMAIL PROTECTED]> wrote:
> > 
> >> Steve Loughran wrote:
> >>>
> >>> I've been running the new build and havent seen
> >> any more loops; I think 
> >>> race conditions are gone.
> >>>
> >>> Incidentally, given we didnt see any way that
> the
> >> thing could loop, 
> >>> given we were using threadlocal to store a
> >> per-thread datastructure, and 
> >>> given that threadlocals are implicitly thread
> >> safe, I'm still not sure 
> >>> where the problem arose. but I have been pointed
> >> at some bugs in 
> >>> ThreadLocal
> >>>
> >>>
> >>>
> >
>
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6550283
> >>> "ThreadLocal.initialValue() may be called
> multiple
> >> times in some cases"
> >>> There is a bit of a race condition on
> >> initialisation, *across all 
> >>> threadlocal classes in use in that thread*. if
> you
> >> are only using your 
> >>> own classes, you need to sync off something
> common
> >> (like the current 
> >>> thread). But you are still vulnerable to any
> other
> >> class using Thread 
> >>> local storage making an operation that increases
> >> the size of the hash 
> >>> table of threadlocal values, in which case you
> are
> >> stuffed.
> >>> This is a WONTFIX for Java<1.6.
> >>>
> >>> Accordingly, you can't reliably use ThreadLocal
> on
> >> a multicpu system for 
> >>> Java <=1.5 as you cannot be sure that other
> >> classes wont stamp on you. 
> >>> This is pretty serious, as the reason you would
> >> use TLS is to avoid 
> >>> concurrency problems.
> >> followup based on looking at the code.
> > 
> > Which code, Steve?
> 
> Any code that uses threadlocal needs to be looked
> at.

Oh--for some reason I had gotten the impression from
your previous message that there was some particular
piece of code at which you had already looked.

-Matt

> You mustnt 
> subclass it and override the initialvalue method
> with one that itself 
> creates objects that may use threadlocal. If you
> leave it with a null 
> init value all is well, but once you start
> subclassing, you run a risk 
> of same-thread reentrant access to datastructures
> that, while thread 
> safe, are not locked against re-entrant operations
> 
> oh, lots of ambuiguity about ThreadLocal cleanup
> too: stuff in a 
> ThreadLocal can hang around for the life of a thread
> 
>
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6209042
> 
> Which means you ought to clean them up when you are
> finished.
> 
> I've filed this as todo items @work
> http://jira.smartfrog.org/jira/browse/SFOS-469
> http://jira.smartfrog.org/jira/browse/SFOS-470
> 
> but not looked through ant's code, not yet
> -Steve
> 
> 
> 
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> For additional commands, e-mail:
> [EMAIL PROTECTED]
> 
> 



       
____________________________________________________________________________________
Moody friends. Drama queens. Your life? Nope! - their life, your story. Play 
Sims Stories at Yahoo! Games.
http://sims.yahoo.com/  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to