You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ui...@apache.org on 2012/02/24 13:20:52 UTC
svn commit: r1293216 -
/felix/sandbox/uiterlix/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
Author: uiterlix
Date: Fri Feb 24 12:20:52 2012
New Revision: 1293216
URL: http://svn.apache.org/viewvc?rev=1293216&view=rev
Log:
added synchronization to fix threadsafety of the ServiceTracker.
Modified:
felix/sandbox/uiterlix/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
Modified: felix/sandbox/uiterlix/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
URL: http://svn.apache.org/viewvc/felix/sandbox/uiterlix/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java?rev=1293216&r1=1293215&r2=1293216&view=diff
==============================================================================
--- felix/sandbox/uiterlix/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java (original)
+++ felix/sandbox/uiterlix/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java Fri Feb 24 12:20:52 2012
@@ -928,64 +928,78 @@ public class ServiceTracker implements S
private ServiceReference highestTrackedCache(long serviceId) {
Long sid = Long.valueOf(serviceId);
- TreeSet services = (TreeSet) m_highestTrackedCache.get(sid);
- if (services != null && services.size() > 0) {
- ServiceReference result = (ServiceReference) services.last();
- return result;
- }
+ synchronized (this) {
+ TreeSet services = (TreeSet) m_highestTrackedCache.get(sid);
+ if (services != null && services.size() > 0) {
+ ServiceReference result = (ServiceReference) services.last();
+ return result;
+ }
+ }
return null;
}
private void addHighestTrackedCache(ServiceReference reference) {
Long serviceId = ServiceUtil.getServiceIdObject(reference);
- TreeSet services = (TreeSet) m_highestTrackedCache.get(serviceId);
- if (services == null) {
- services = new TreeSet();
- m_highestTrackedCache.put(serviceId, services);
- }
- services.add(reference);
+ synchronized (this) {
+ TreeSet services = (TreeSet) m_highestTrackedCache.get(serviceId);
+ if (services == null) {
+ services = new TreeSet();
+ m_highestTrackedCache.put(serviceId, services);
+ }
+ services.add(reference);
+ }
}
private void removeHighestTrackedCache(ServiceReference reference) {
Long serviceId = ServiceUtil.getServiceIdObject(reference);
- TreeSet services = (TreeSet) m_highestTrackedCache.get(serviceId);
- if (services != null) {
- services.remove(reference);
- }
+ synchronized (this) {
+ TreeSet services = (TreeSet) m_highestTrackedCache.get(serviceId);
+ if (services != null) {
+ services.remove(reference);
+ }
+ }
}
private void clearHighestTrackedCache() {
- m_highestTrackedCache.clear();
+ synchronized (this) {
+ m_highestTrackedCache.clear();
+ }
}
private final HashMap m_highestHiddenCache = new HashMap();
private ServiceReference highestHiddenCache(long serviceId) {
Long sid = Long.valueOf(serviceId);
- TreeSet services = (TreeSet) m_highestHiddenCache.get(sid);
- if (services != null && services.size() > 0) {
- ServiceReference result = (ServiceReference) services.last();
- return result;
+ synchronized (this) {
+ TreeSet services = (TreeSet) m_highestHiddenCache.get(sid);
+ if (services != null && services.size() > 0) {
+ ServiceReference result = (ServiceReference) services.last();
+ return result;
+ }
}
return null;
}
private void addHighestHiddenCache(ServiceReference reference) {
Long serviceId = ServiceUtil.getServiceIdObject(reference);
- TreeSet services = (TreeSet) m_highestHiddenCache.get(serviceId);
- if (services == null) {
- services = new TreeSet();
- m_highestHiddenCache.put(serviceId, services);
- }
- services.add(reference);
+ synchronized (this) {
+ TreeSet services = (TreeSet) m_highestHiddenCache.get(serviceId);
+ if (services == null) {
+ services = new TreeSet();
+ m_highestHiddenCache.put(serviceId, services);
+ }
+ services.add(reference);
+ }
}
private void removeHighestHiddenCache(ServiceReference reference) {
Long serviceId = ServiceUtil.getServiceIdObject(reference);
- TreeSet services = (TreeSet) m_highestHiddenCache.get(serviceId);
- if (services != null) {
- services.remove(reference);
- }
+ synchronized (this) {
+ TreeSet services = (TreeSet) m_highestHiddenCache.get(serviceId);
+ if (services != null) {
+ services.remove(reference);
+ }
+ }
}
/**