Author: alesj
Date: 2009-12-05 16:10:55 -0500 (Sat, 05 Dec 2009)
New Revision: 97484
Modified:
projects/jboss-osgi/projects/runtime/framework/trunk/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
Log:
Proper service unget. TODO more tests.
Modified:
projects/jboss-osgi/projects/runtime/framework/trunk/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java
===================================================================
---
projects/jboss-osgi/projects/runtime/framework/trunk/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-12-05
20:03:56 UTC (rev 97483)
+++
projects/jboss-osgi/projects/runtime/framework/trunk/src/main/java/org/jboss/osgi/framework/bundle/OSGiServiceState.java 2009-12-05
21:10:55 UTC (rev 97484)
@@ -431,7 +431,7 @@
ContextTracker ct = getContextTracker();
int count = ct.getUsedByCount(this, bundleState);
- if (count == 1 || (count == 2 && ct == bundleState)) // remove &
unget, double count if tracker == bundle
+ if (count == 0) // remove & unget
{
serviceCache.remove(bundleState);
ServiceFactory serviceFactory = (ServiceFactory)serviceOrFactory;
@@ -674,11 +674,20 @@
Set<Object> users = ct.getUsers(this);
if (users.isEmpty() == false)
{
+ Set<AbstractBundleState> used = new
HashSet<AbstractBundleState>();
OSGiBundleManager manager = bundleState.getBundleManager();
for (Object user : users)
{
AbstractBundleState using = manager.getBundleForUser(user);
- using.ungetContex(this); // ungetService will cleanup service cache
+ if (used.add(using)) // add so we don't do duplicate work
+ {
+ int count = ct.getUsedByCount(this, using);
+ while(count > 0)
+ {
+ using.ungetContex(this); // ungetService will cleanup service cache
+ count--;
+ }
+ }
}
}
}
Show replies by date