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);
+ }
+ }
}
/**