[jboss-as7-dev] Component upgrade of Javassist for AS7-5127...

Scott Marlow smarlow at redhat.com
Tue Jul 10 11:52:53 EDT 2012


On 07/06/2012 10:40 AM, Kabir Khan wrote:
>
> On 6 Jul 2012, at 13:57, Scott Marlow wrote:
>
>> We aren't using the latest Javassist on AS7 master.  Any arguments
>> against switching to the latest/shiniest 3.1.7.0-GA javassist?  That has
>> a fix for AS7-5127.
>>
>> Currently, the following AS7 modules have dependencies on Javassist:
>>
>> org.jboss.ws.native.jbossws-native-core
>> org.jboss.weld.core
>> org.jboss.as.weld
>> org.scannotation.scannotation
>> org.hibernate (envers also)
>>
>> Also, could someone (familiar with javassist) take a look at the code
>> change that AS7-5127 wants brought into AS7?  In the updated method,
>> parameter "java.lang.reflect.Method[] methods" is read outside of the
>> synchronized lock.
> I believe the check on line 53 needs to happen in a synchronized block as well to make sure it gets the latest, so rather than
> 	if (methods[index] == null) {
>   	    Method m1 = thisMethod == null ? null
>   	         : findMethod(self, thisMethod, desc);
>   	   Method m0 = findSuperMethod(self, superMethod, desc);
>   	   synchronized (methods) {
>                 if (methods[index] == null) {
>                   methods[index + 1] = m1;
>   	         methods[index] = m0;
>   	      }
>            }
>        }
>
> Something along the lines of this would be more correct
>
>     Method existing = null;
>     synchronized (methods) {
>         Method existing = methods[index];
>     }
>     if (existing == null) {
>   	    Method m1 = thisMethod == null ? null
>   	         : findMethod(self, thisMethod, desc);
>   	   Method m0 = findSuperMethod(self, superMethod, desc);
>   	   synchronized (methods) {
>                 if (methods[index] == null) {
>                   methods[index + 1] = m1;
>   	         methods[index] = m0;
>   	      }
>            }
>        }
>
>

That looks better but probably not that much more concurrent then the 
original code that performed both the read/write  in the same 
synchronization block.

Does anyone know if the array is longer than two elements (just curious 
if it contains just two entries or multiple pairs?)

>
>>
>> code change is here
>> https://source.jboss.org/browse/Javassist/trunk/src/main/javassist/util/proxy/RuntimeSupport.java?u=-1&r1=591&r2=637
>>
>> _______________________________________________
>> jboss-as7-dev mailing list
>> jboss-as7-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/jboss-as7-dev
>




More information about the jboss-as7-dev mailing list