Return-Path: X-Original-To: apmail-zest-commits-archive@minotaur.apache.org Delivered-To: apmail-zest-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3379B17D9A for ; Fri, 17 Apr 2015 16:05:23 +0000 (UTC) Received: (qmail 33022 invoked by uid 500); 17 Apr 2015 16:05:23 -0000 Delivered-To: apmail-zest-commits-archive@zest.apache.org Received: (qmail 32973 invoked by uid 500); 17 Apr 2015 16:05:23 -0000 Mailing-List: contact commits-help@zest.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@zest.apache.org Delivered-To: mailing list commits@zest.apache.org Received: (qmail 32420 invoked by uid 99); 17 Apr 2015 16:05:22 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 17 Apr 2015 16:05:22 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 957DDE0519; Fri, 17 Apr 2015 16:05:22 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: niclas@apache.org To: commits@zest.apache.org Date: Fri, 17 Apr 2015 16:06:08 -0000 Message-Id: <50168372ad3a4d53bba43a48cfb6f2e8@git.apache.org> In-Reply-To: <7ba7b5c06d714c99b0db0e728d48e7c3@git.apache.org> References: <7ba7b5c06d714c99b0db0e728d48e7c3@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [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 Authored: Tue Apr 23 13:51:27 2013 +0200 Committer: Arvid Huss 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