1 Reply Latest reply on Feb 14, 2012 3:56 PM by clebert.suconic

    synchronized on ConcurrentHashMap.

    borges

      ClientSessionImpl uses synchronized on its producers field, which is a ConcurrentHashSet (actually a HornetQ wrapper for ConcurrentHashMap).

       

      There is a private method Set<ClientProducerInternal> cloneProducers(), that takes a copy of all keys.I think that this method is what motivated the double concurrency policy. I suggest we live with the concurrency of it and copy the set using an iterator.

       

      If that concurrency in the creation of the clone is not desirable, I suggest just using a regular HashSet there, as using synchronized for every access defeats the purpose of a concurrent set.

       

      Clebert?

       

       

      Cheers,

      Francisco

        • 1. Re: synchronized on ConcurrentHashMap.
          clebert.suconic

          In certain places we can afford having just concurrentHashMap playing (adding / removing), but at the time we iterate we just need an instant copy.

           

          But if all the access are going through a synchronized block, then I agree there's no reason to use a ConcurrentHashMap.

           

          This was fixed through tests on EAP. It was done under a lot of pressure to have it fixed. Maybe I didn't do a proper analysis on the fix.