Hi,

> On 20 Nov 2014, at 16:33, Peter Levart <peter.lev...@gmail.com> wrote:
> 
> Hi Martin,
> 
> On 11/19/2014 01:42 AM, Martin Buchholz wrote:
>> Hi Joe, Peter, Paul
>> 
>> This is the followup on thread safety I promised Peter.
> 
> Looks good.

+1

> 
> I made the WildcardTypeImpl.[upperBoundASTs, lowerBoundASTs] and 
> TypeVariableImpl.boundASTs fields volatile in my version of patch (instead of 
> final):
> 
> http://cr.openjdk.java.net/~plevart/jdk9-dev/GenericsReflectionRaces/webrev.01/
> 
> ...so that after the structure they point to has been parsed into bound 
> types, they can be thrown away. The comments indicate that possibility 
> already, but the implementor was afraid to do it because of possible races. I 
> think I got it right here.
> 


As a cleanup and given the current state of testing here, I slightly favour 
Martin’s version because it should just make the current behaviour a bit safer.

Btw, has anyone seen the assert for upper/lower bounds == null fail in the wild?

private FieldTypeSignature[] getUpperBoundASTs() {
    // check that upper bounds were not evaluated yet
    assert(upperBounds == null);
    return upperBoundASTs;
}

shouldn’t it happen once in a while:

public Type[] getUpperBounds() {
    // lazily initialize bounds if necessary
    if (upperBounds == null) {

        // thread gets preempted here, other thread completes init, upperBounds 
are != null

        FieldTypeSignature[] fts = getUpperBoundASTs(); // get AST


Is the current code only working because most run without esa?

cheers
/Joel

Reply via email to