You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ma...@apache.org on 2010/10/11 15:55:03 UTC
svn commit: r1021349 - in
/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm:
impl/dependencies/ServiceDependencyImpl.java tracker/ServiceTracker.java
Author: marrs
Date: Mon Oct 11 13:55:02 2010
New Revision: 1021349
URL: http://svn.apache.org/viewvc?rev=1021349&view=rev
Log:
Bugfixes related to aspects and general life cycle issues. Committed so others can test against this version.
Modified:
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
Modified: felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java?rev=1021349&r1=1021348&r2=1021349&view=diff
==============================================================================
--- felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java (original)
+++ felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/impl/dependencies/ServiceDependencyImpl.java Mon Oct 11 13:55:02 2010
@@ -392,12 +392,15 @@ public class ServiceDependencyImpl exten
m_isStarted = false;
needsStopping = true;
}
- m_services.remove(service);
}
if (needsStopping) {
m_tracker.close();
m_tracker = null;
}
+ //moved this down
+ synchronized (this) {
+ m_services.remove(service);
+ }
}
public Object addingService(ServiceReference ref) {
@@ -461,6 +464,7 @@ public class ServiceDependencyImpl exten
synchronized (this) {
services = m_services.toArray();
}
+
for (int i = 0; i < services.length; i++) {
DependencyService ds = (DependencyService) services[i];
if (makeUnavailable) {
Modified: felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java?rev=1021349&r1=1021348&r2=1021349&view=diff
==============================================================================
--- felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java (original)
+++ felix/trunk/dependencymanager/core/src/main/java/org/apache/felix/dm/tracker/ServiceTracker.java Mon Oct 11 13:55:02 2010
@@ -812,7 +812,7 @@ public class ServiceTracker implements S
class Tracked extends AbstractTracked implements ServiceListener {
/** A list of services that are currently hidden because there is an aspect available with a higher ranking. */
private final List m_hidden = new ArrayList();
-
+
/**
* Returns the highest hidden aspect for the specified service ID.
*
@@ -981,33 +981,30 @@ public class ServiceTracker implements S
+ event.getType() + "]: " + reference);
}
+ long sid = ServiceUtil.getServiceId(reference);
switch (event.getType()) {
case ServiceEvent.REGISTERED :
case ServiceEvent.MODIFIED :
ServiceReference higher = null;
ServiceReference lower = null;
- boolean isAspect = ServiceUtil.isAspect(reference);
- if (true /* WAS isAspect */) {
- long sid = ServiceUtil.getServiceId(reference);
- ServiceReference sr = highestTracked(sid);
- if (sr != null) {
- int ranking = ServiceUtil.getRanking(reference);
- int trackedRanking = ServiceUtil.getRanking(sr);
- if (ranking > trackedRanking) {
- // found a higher ranked one!
- if (DEBUG) {
- System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a higher ranked aspect: " + ServiceUtil.toString(reference) + " vs " + ServiceUtil.toString(sr));
- }
- higher = sr;
- }
- else {
- // found lower ranked one!
- if (DEBUG) {
- System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a lower ranked aspect: " + ServiceUtil.toString(reference) + " vs " + ServiceUtil.toString(sr));
- }
- lower = sr;
- }
- }
+ ServiceReference sr = highestTracked(sid);
+ if (sr != null) {
+ int ranking = ServiceUtil.getRanking(reference);
+ int trackedRanking = ServiceUtil.getRanking(sr);
+ if (ranking > trackedRanking) {
+ // found a higher ranked one!
+ if (DEBUG) {
+ System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a higher ranked aspect: " + ServiceUtil.toString(reference) + " vs " + ServiceUtil.toString(sr));
+ }
+ higher = sr;
+ }
+ else {
+ // found lower ranked one!
+ if (DEBUG) {
+ System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a lower ranked aspect: " + ServiceUtil.toString(reference) + " vs " + ServiceUtil.toString(sr));
+ }
+ lower = sr;
+ }
}
if (listenerFilter != null) { // service listener added with filter
@@ -1060,26 +1057,21 @@ public class ServiceTracker implements S
*/
}
else {
- higher = null;
- isAspect = ServiceUtil.isAspect(reference);
- if (true /* WAS isAspect */) {
- long sid = ServiceUtil.getServiceId(reference);
- ServiceReference sr = highestHidden(sid);
- if (sr != null) {
- if (DEBUG) {
- System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a hidden aspect: " + ServiceUtil.toString(reference));
- }
- higher = sr;
+ ServiceReference ht = highestTracked(sid);
+ ServiceReference hh = highestHidden(sid);
+ if (reference.equals(ht)) {
+ try {
+ if (hh != null) {
+ unhide(hh);
+ track(hh, null);
+ }
+ }
+ finally {
+ untrack(reference, event);
}
}
- try {
- if (higher != null) {
- unhide(higher);
- track(higher, null);
- }
- }
- finally {
- untrack(reference, event);
+ else {
+ unhide(reference);
}
/*
* If the customizer throws an unchecked exception,
@@ -1090,27 +1082,22 @@ public class ServiceTracker implements S
break;
case 8 /* ServiceEvent.MODIFIED_ENDMATCH */ :
case ServiceEvent.UNREGISTERING :
- higher = null;
- isAspect = ServiceUtil.isAspect(reference);
- if (true /* WAS isAspect */) {
- long sid = ServiceUtil.getServiceId(reference);
- ServiceReference sr = highestHidden(sid);
- if (sr != null) {
- if (DEBUG) {
- System.out.println("ServiceTracker.Tracked.serviceChanged[" + event.getType() + "]: Found a hidden aspect: " + ServiceUtil.toString(reference));
- }
- higher = sr;
- }
- }
- try {
- if (higher != null) {
- unhide(higher);
- track(higher, null);
- }
- }
- finally {
- untrack(reference, event);
- }
+ ServiceReference ht = highestTracked(sid);
+ ServiceReference hh = highestHidden(sid);
+ if (reference.equals(ht)) {
+ try {
+ if (hh != null) {
+ unhide(hh);
+ track(hh, null);
+ }
+ }
+ finally {
+ untrack(reference, event);
+ }
+ }
+ else {
+ unhide(reference);
+ }
/*
* If the customizer throws an unchecked exception, it is
* safe to let it propagate