On 07/27/2012 07:26 AM, Valerie (Yu-Ching) Peng wrote:
Max,

So, do you want me to check the exemptCache again, i.e. what line 122-
125 do, inside the synchronized block before calling
getAppPermissions(...)?

Yes, that should work.

If you do believe this is a very rare case and you don't mind getAppPermissions() called twice, the synchonized block seems unnecessary. Both getAppPermissions and putIfAbsent should be thread-safe methods.

Thanks
Max


Thanks,
Valerie

On 07/25/12 18:29, Weijun Wang wrote:
http://cr.openjdk.java.net/~valeriep/7107616

You have

 122         CryptoPermissions appPerms =
exemptCache.get(callerCodeBase);
 123         // Found result in cache
 124         if (appPerms != null) {
 125             if (appPerms == CACHE_NULL_MARK) appPerms = null;
 126         } else {
 127             synchronized (this.getClass()) {
 128                 appPerms = getAppPermissions(callerCodeBase);
 129                 exemptCache.putIfAbsent(callerCodeBase,
 130                     (appPerms == null? CACHE_NULL_MARK:appPerms));
 131             }
 132         }

This is not as optimized as before, that there is a chance
getAppPermissions could be called twice, and this seems to make the
synchronized block not worth syncing.


http://cr.openjdk.java.net/~valeriep/7185471

I haven't looked at this yet. Seems a lot of math there.

Thanks
Max


The changes are for JDK 8. May be backported to 7u later if necessary,
Thanks,
Valerie

Reply via email to