You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/04/17 18:06:08 UTC
[48/50] [abbrv] zest-qi4j git commit: Prevent deadlock situation in
applyChanges.
Prevent deadlock situation in applyChanges.
Project: http://git-wip-us.apache.org/repos/asf/zest-qi4j/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-qi4j/commit/ba0b2064
Tree: http://git-wip-us.apache.org/repos/asf/zest-qi4j/tree/ba0b2064
Diff: http://git-wip-us.apache.org/repos/asf/zest-qi4j/diff/ba0b2064
Branch: refs/heads/master
Commit: ba0b2064527416320af21ed430295118a69d1961
Parents: 4da4e22
Author: Arvid Huss <ar...@jayway.com>
Authored: Tue Apr 23 13:51:27 2013 +0200
Committer: Arvid Huss <ar...@jayway.com>
Committed: Tue Apr 23 13:51:27 2013 +0200
----------------------------------------------------------------------
.../ConcurrentModificationCheckConcern.java | 53 +++++++++++---------
1 file changed, 30 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/ba0b2064/core/spi/src/main/java/org/qi4j/spi/entitystore/ConcurrentModificationCheckConcern.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/ConcurrentModificationCheckConcern.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/ConcurrentModificationCheckConcern.java
index f6599f5..8c3e22c 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/ConcurrentModificationCheckConcern.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/ConcurrentModificationCheckConcern.java
@@ -102,30 +102,37 @@ public abstract class ConcurrentModificationCheckConcern
{
lock.writeLock().lock();
- versions.checkForConcurrentModification( loaded, module, currentTime );
-
- final StateCommitter committer = uow.applyChanges();
-
- return new StateCommitter()
+ try
{
- @Override
- public void commit()
- {
- committer.commit();
- versions.forgetVersions( loaded );
-
- lock.writeLock().unlock();
- }
-
- @Override
- public void cancel()
- {
- committer.cancel();
- versions.forgetVersions( loaded );
-
- lock.writeLock().unlock();
- }
- };
+ versions.checkForConcurrentModification( loaded, module, currentTime );
+
+ final StateCommitter committer = uow.applyChanges();
+
+ return new StateCommitter()
+ {
+ @Override
+ public void commit()
+ {
+ committer.commit();
+ versions.forgetVersions( loaded );
+
+ lock.writeLock().unlock();
+ }
+
+ @Override
+ public void cancel()
+ {
+ committer.cancel();
+ versions.forgetVersions( loaded );
+
+ lock.writeLock().unlock();
+ }
+ };
+ } catch( EntityStoreException e )
+ {
+ lock.writeLock().unlock();
+ throw e;
+ }
}
@Override