You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2018/11/30 14:36:40 UTC
[sling-org-apache-sling-scripting-core] 01/01: SLING-8141 -
ScriptCacheImpl throws IllegalStateException on deactivate
This is an automated email from the ASF dual-hosted git repository.
radu pushed a commit to branch issues/SLING-8141
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-core.git
commit 542d8318db3842dc1df95738d842be8e7a82132c
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Fri Nov 30 15:36:21 2018 +0100
SLING-8141 - ScriptCacheImpl throws IllegalStateException on deactivate
* synced deactivate and configureCache, called from handleEvent so that
if an event occurs at the same time as a deactivate the unregister method
of the ResourceChangeListener service registration is not called twice for
the same registration
* optimised cache reconfiguration when an event occurs
---
.../sling/scripting/core/impl/ScriptCacheImpl.java | 77 ++++++++++++----------
1 file changed, 41 insertions(+), 36 deletions(-)
diff --git a/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java b/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
index 61a028d..67f5882 100644
--- a/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
+++ b/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
@@ -233,37 +233,39 @@ public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener, Ext
resolver.close();
}
}
-
- configureCache();
active = true;
+ configureCache();
}
private void configureCache() {
writeLock.lock();
try {
- if (resourceChangeListener != null) {
- resourceChangeListener.unregister();
- resourceChangeListener = null;
- }
- internalMap.clear();
- if (additionalExtensions != null) {
- extensions.addAll(Arrays.asList(additionalExtensions));
- }
- if (!extensions.isEmpty()) {
- Set<String> globPatterns = new HashSet<>(extensions.size());
- for (String extension : extensions) {
- globPatterns.add("glob:**/*." + extension);
+ if (active) {
+ if (resourceChangeListener != null) {
+ resourceChangeListener.unregister();
+ resourceChangeListener = null;
+ }
+ internalMap.clear();
+ if (additionalExtensions != null) {
+ extensions.addAll(Arrays.asList(additionalExtensions));
+ }
+ if (!extensions.isEmpty()) {
+ Set<String> globPatterns = new HashSet<>(extensions.size());
+ for (String extension : extensions) {
+ globPatterns.add("glob:**/*." + extension);
+ }
+ Dictionary<String, Object> resourceChangeListenerProperties = new Hashtable<>();
+ resourceChangeListenerProperties
+ .put(ResourceChangeListener.PATHS, globPatterns.toArray(new String[globPatterns.size()]));
+ resourceChangeListenerProperties.put(ResourceChangeListener.CHANGES,
+ new String[]{ResourceChange.ChangeType.CHANGED.name(), ResourceChange.ChangeType.REMOVED.name()});
+ resourceChangeListener =
+ bundleContext.registerService(
+ ResourceChangeListener.class,
+ this,
+ resourceChangeListenerProperties
+ );
}
- Dictionary<String, Object> resourceChangeListenerProperties = new Hashtable<>();
- resourceChangeListenerProperties.put(ResourceChangeListener.PATHS, globPatterns.toArray(new String[globPatterns.size()]));
- resourceChangeListenerProperties.put(ResourceChangeListener.CHANGES,
- new String[]{ResourceChange.ChangeType.CHANGED.name(), ResourceChange.ChangeType.REMOVED.name()});
- resourceChangeListener =
- bundleContext.registerService(
- ResourceChangeListener.class,
- this,
- resourceChangeListenerProperties
- );
}
} finally {
writeLock.unlock();
@@ -272,16 +274,21 @@ public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener, Ext
@Deactivate
protected void deactivate() {
- internalMap.clear();
- if (resourceChangeListener != null) {
- resourceChangeListener.unregister();
- resourceChangeListener = null;
- }
- if (threadPool != null) {
- threadPoolManager.release(threadPool);
- threadPool = null;
+ writeLock.lock();
+ try {
+ internalMap.clear();
+ if (resourceChangeListener != null) {
+ resourceChangeListener.unregister();
+ resourceChangeListener = null;
+ }
+ if (threadPool != null) {
+ threadPoolManager.release(threadPool);
+ threadPool = null;
+ }
+ active = false;
+ } finally {
+ writeLock.unlock();
}
- active = false;
}
@Override
@@ -291,10 +298,8 @@ public class ScriptCacheImpl implements ScriptCache, ResourceChangeListener, Ext
ScriptEngine scriptEngine = factory.getScriptEngine();
if (scriptEngine instanceof Compilable) {
extensions.addAll(factory.getExtensions());
- if (active) {
- configureCache();
- }
}
}
+ configureCache();
}
}