Based on my cursory look at this code and this change, I think this change isn't right. From what I see in the code, the synchronized block is necessary, since what it's trying to achieve there is a mutual exclusivity over a bunch of operations within that block. With this synchronized block removed, it no longer guarantees the entire block to be done serially by a single thread anymore.

-Jaikiran


On 02/11/17 2:50 AM, gin...@apache.org wrote:
No need to synchronise a concurrent map

Project: http://git-wip-us.apache.org/repos/asf/ant-ivy/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant-ivy/commit/bac64754
Tree: http://git-wip-us.apache.org/repos/asf/ant-ivy/tree/bac64754
Diff: http://git-wip-us.apache.org/repos/asf/ant-ivy/diff/bac64754

Branch: refs/heads/master
Commit: bac647543497f0aa2a9f92fe726e1eb18631b4cc
Parents: fa21d6f
Author: Gintas Grigelionis <gin...@apache.org>
Authored: Wed Nov 1 22:19:31 2017 +0100
Committer: Gintas Grigelionis <gin...@apache.org>
Committed: Wed Nov 1 22:19:31 2017 +0100

----------------------------------------------------------------------
  .../ivy/plugins/lock/FileBasedLockStrategy.java | 68 +++++++++-----------
  1 file changed, 29 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant-ivy/blob/bac64754/src/java/org/apache/ivy/plugins/lock/FileBasedLockStrategy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/ivy/plugins/lock/FileBasedLockStrategy.java 
b/src/java/org/apache/ivy/plugins/lock/FileBasedLockStrategy.java
index 2e31b2f..d59c544 100644
--- a/src/java/org/apache/ivy/plugins/lock/FileBasedLockStrategy.java
+++ b/src/java/org/apache/ivy/plugins/lock/FileBasedLockStrategy.java
@@ -64,39 +64,34 @@ public abstract class FileBasedLockStrategy extends 
AbstractLockStrategy {
          }
          long start = System.currentTimeMillis();
          do {
-            synchronized (currentLockHolders) {
+            int lockCount = hasLock(file, currentThread);
+            if (isDebugLocking()) {
+                debugLocking("current status for " + file + " is " + lockCount
+                        + " held locks: " + getCurrentLockHolderNames(file));
+            }
+            if (lockCount < 0) {
+                /* Another thread in this process holds the lock; we need to 
wait */
                  if (isDebugLocking()) {
-                    debugLocking("entered synchronized area (locking)");
+                    debugLocking("waiting for another thread to release the lock: 
"
+                            + getCurrentLockHolderNames(file));
                  }
-                int lockCount = hasLock(file, currentThread);
+            } else if (lockCount > 0) {
+                int holdLocks = incrementLock(file, currentThread);
                  if (isDebugLocking()) {
-                    debugLocking("current status for " + file + " is " + 
lockCount
-                            + " held locks: " + 
getCurrentLockHolderNames(file));
+                    debugLocking("reentrant lock acquired on " + file + " in "
+                            + (System.currentTimeMillis() - start) + "ms" + " - 
hold locks = "
+                            + holdLocks);
                  }
-                if (lockCount < 0) {
-                    /* Another thread in this process holds the lock; we need 
to wait */
-                    if (isDebugLocking()) {
-                        debugLocking("waiting for another thread to release the 
lock: "
-                                + getCurrentLockHolderNames(file));
-                    }
-                } else if (lockCount > 0) {
-                    int holdLocks = incrementLock(file, currentThread);
+                return true;
+            } else {
+                /* No prior lock on this file is held at all */
+                if (locker.tryLock(file)) {
                      if (isDebugLocking()) {
-                        debugLocking("reentrant lock acquired on " + file + " in 
"
-                                + (System.currentTimeMillis() - start) + "ms" + " - 
hold locks = "
-                                + holdLocks);
+                        debugLocking("lock acquired on " + file + " in "
+                                + (System.currentTimeMillis() - start) + "ms");
                      }
+                    incrementLock(file, currentThread);
                      return true;
-                } else {
-                    /* No prior lock on this file is held at all */
-                    if (locker.tryLock(file)) {
-                        if (isDebugLocking()) {
-                            debugLocking("lock acquired on " + file + " in "
-                                    + (System.currentTimeMillis() - start) + 
"ms");
-                        }
-                        incrementLock(file, currentThread);
-                        return true;
-                    }
                  }
              }
              if (isDebugLocking()) {
@@ -112,21 +107,16 @@ public abstract class FileBasedLockStrategy extends 
AbstractLockStrategy {
          if (isDebugLocking()) {
              debugLocking("releasing lock on " + file);
          }
-        synchronized (currentLockHolders) {
+        int holdLocks = decrementLock(file, currentThread);
+        if (holdLocks == 0) {
+            locker.unlock(file);
              if (isDebugLocking()) {
-                debugLocking("entered synchronized area (unlocking)");
+                debugLocking("lock released on " + file);
              }
-            int holdLocks = decrementLock(file, currentThread);
-            if (holdLocks == 0) {
-                locker.unlock(file);
-                if (isDebugLocking()) {
-                    debugLocking("lock released on " + file);
-                }
-            } else {
-                if (isDebugLocking()) {
-                    debugLocking("reentrant lock released on " + file + " - hold 
locks = "
-                            + holdLocks);
-                }
+        } else {
+            if (isDebugLocking()) {
+                debugLocking("reentrant lock released on " + file + " - hold locks 
= "
+                        + holdLocks);
              }
          }
      }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@ant.apache.org
For additional commands, e-mail: dev-h...@ant.apache.org

Reply via email to