[
https://issues.jboss.org/browse/ISPN-1546?page=com.atlassian.jira.plugin....
]
Sanne Grinovero edited comment on ISPN-1546 at 12/9/11 9:58 AM:
----------------------------------------------------------------
Had another idea:
rather than making a defensive copy of the array while owning a lock, and having to make
this copy on each created iterator, we should make a copy on writes on the array and swap
the reference safely with the previous instance when applying any change. I'm not
looking at the code, so not sure if the safe reference swap means using a lock or just an
AtomicReference, but this would avoid a copy and lock per read operation. WDYT?
was (Author: sannegrinovero):
Had another idea:
rather than making a defensive copy of the array while owning a lock, and having to make
this copy on each created iterator, we should make a copy on writes on the array and swap
the reference safely with the previous instance when applying any change. I'm not
looking at the code, so not sure if the safe reference swap means using a lock or just an
AtomicReference, but this would a copy and lock per read operation. WDYT?
FineGrainedAtomicMap key and value iterators are not threadsafe
---------------------------------------------------------------
Key: ISPN-1546
URL:
https://issues.jboss.org/browse/ISPN-1546
Project: Infinispan
Issue Type: Bug
Components: Core API, Locking and Concurrency
Reporter: Sanne Grinovero
Assignee: Vladimir Blagojevic
Invoking #keySet() or #values() might fail, even when using a transaction to isolate
threads:
{code}
java.util.ConcurrentModificationException
at
org.infinispan.util.FastCopyHashMap$FasyCopyHashMapIterator.nextEntry(FastCopyHashMap.java:484)
at org.infinispan.util.FastCopyHashMap$KeyIterator.next(FastCopyHashMap.java:560)
at java.util.AbstractCollection.addAll(AbstractCollection.java:305)
at
org.infinispan.atomic.FineGrainedAtomicHashMapProxy.keySet(FineGrainedAtomicHashMapProxy.java:104)
at
org.hibernate.ogm.dialect.infinispan.InfinispanAssociationSnapshot.getRowKeys(InfinispanAssociationSnapshot.java:59)
at org.hibernate.ogm.datastore.spi.Association.getKeys(Association.java:132)
at org.hibernate.ogm.loader.OgmLoader.getResultSet(OgmLoader.java:420)
at org.hibernate.ogm.loader.OgmLoader.doQuery(OgmLoader.java:248)
at
org.hibernate.ogm.loader.OgmLoader.doQueryAndInitializeNonLazyCollections(OgmLoader.java:215)
at org.hibernate.ogm.loader.OgmLoader.loadCollection(OgmLoader.java:185)
at
org.hibernate.ogm.loader.OgmBasicCollectionLoader.initialize(OgmBasicCollectionLoader.java:42)
at
org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:622)
at
org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:82)
at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1607)
at
org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:379)
at
org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:112)
at org.hibernate.collection.internal.PersistentSet.iterator(PersistentSet.java:180)
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see:
http://www.atlassian.com/software/jira