You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by jb...@apache.org on 2019/03/07 12:27:15 UTC
svn commit: r1854973 -
/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java
Author: jbonofre
Date: Thu Mar 7 12:27:15 2019
New Revision: 1854973
URL: http://svn.apache.org/viewvc?rev=1854973&view=rev
Log:
[FELIX-6066] This closes #185
Modified:
felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java
Modified: felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java?rev=1854973&r1=1854972&r2=1854973&view=diff
==============================================================================
--- felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java (original)
+++ felix/trunk/configadmin/src/main/java/org/apache/felix/cm/impl/persistence/PersistenceManagerTracker.java Thu Mar 7 12:27:15 2019
@@ -175,7 +175,10 @@ public class PersistenceManagerTracker
{
deactivate();
}
- activate(holder.getPersistenceManager());
+ if (!holder.isActivated()) {
+ activate(holder.getPersistenceManager());
+ holder.activate();
+ }
}
});
}
@@ -197,7 +200,7 @@ public class PersistenceManagerTracker
this.holders.remove(holder);
this.holders.add(new Holder(reference, holder.getPersistenceManager()));
Collections.sort(this.holders);
- if ( holders.get(0) == holder && oldHolder.compareTo(holder) != 0 )
+ if ( holders.get(0) == holder && oldHolder != null && oldHolder.compareTo(holder) != 0 )
{
this.workerQueue.enqueue(new Runnable()
{
@@ -206,7 +209,10 @@ public class PersistenceManagerTracker
public void run()
{
deactivate();
- activate(holder.getPersistenceManager());
+ if (!holder.isActivated()) {
+ activate(holder.getPersistenceManager());
+ holder.activate();
+ }
}
});
}
@@ -234,7 +240,11 @@ public class PersistenceManagerTracker
deactivate();
if ( !holders.isEmpty() )
{
- activate(holders.get(0).getPersistenceManager());
+ Holder h = holders.get(0);
+ if (!h.isActivated()) {
+ activate(h.getPersistenceManager());
+ h.activate();
+ }
}
}
});
@@ -248,6 +258,9 @@ public class PersistenceManagerTracker
private final ExtPersistenceManager manager;
+ // no need to synchronize, as it's changed only in WorkQueue tasks
+ private boolean activated;
+
public Holder(final ServiceReference<PersistenceManager> ref, final ExtPersistenceManager epm)
{
this.reference = ref;
@@ -266,6 +279,14 @@ public class PersistenceManagerTracker
return -reference.compareTo(o.reference);
}
+ public boolean isActivated() {
+ return activated;
+ }
+
+ public void activate() {
+ this.activated = true;
+ }
+
@Override
public int hashCode()
{