Author: chetanm
Date: Mon Jun 29 06:03:47 2015
New Revision: 1688090
URL: http://svn.apache.org/r1688090
Log:
OAK-2401 - SegmentNodeStoreService prone to deadlocks
reduce the scope of synchronized code block
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java?rev=1688090&r1=1688089&r2=1688090&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeStoreService.java
Mon Jun 29 06:03:47 2015
@@ -229,7 +229,7 @@ public class SegmentNodeStoreService ext
private FileStore store;
- private SegmentNodeStore delegate;
+ private volatile SegmentNodeStore delegate;
private ObserverTracker observerTracker;
@@ -265,7 +265,7 @@ public class SegmentNodeStoreService ext
public static final String PROP_BLOB_GC_MAX_AGE = "blobGcMaxAgeInSecs";
@Override
- protected synchronized SegmentNodeStore getNodeStore() {
+ protected SegmentNodeStore getNodeStore() {
checkState(delegate != null, "service must be activated when used");
return delegate;
}
@@ -445,19 +445,22 @@ public class SegmentNodeStoreService ext
}
@Deactivate
- public synchronized void deactivate() {
+ public void deactivate() {
unregisterNodeStore();
- if (observerTracker != null) {
- observerTracker.stop();
- }
- if (gcMonitor != null) {
- gcMonitor.stop();
- }
- delegate = null;
- if (store != null) {
- store.close();
- store = null;
+ synchronized (this) {
+ if (observerTracker != null) {
+ observerTracker.stop();
+ }
+ if (gcMonitor != null) {
+ gcMonitor.stop();
+ }
+ delegate = null;
+
+ if (store != null) {
+ store.close();
+ store = null;
+ }
}
}