[vmkit-commits] [vmkit] r180522 - Updated patch for Knopflerfish 3.5.0. Incinerator now can reset stale references to bundles after they have been uninstalled.

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:21:14 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:19:41 2013
New Revision: 180522

URL: http://llvm.org/viewvc/llvm-project?rev=180522&view=rev
Log:
Updated patch for Knopflerfish 3.5.0. Incinerator now can reset stale references to bundles after they have been uninstalled.
(cherry picked from commit 7dc462c0426a3cf94cbb023726d55fb3db198367)

Modified:
    vmkit/trunk/incinerator/osgi/src/j3/J3Mgr.java
    vmkit/trunk/incinerator/osgi/src/j3mgr/J3MgrImpl.java
    vmkit/trunk/incinerator/tests/debug.txt

Modified: vmkit/trunk/incinerator/osgi/src/j3/J3Mgr.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/osgi/src/j3/J3Mgr.java?rev=180522&r1=180521&r2=180522&view=diff
==============================================================================
--- vmkit/trunk/incinerator/osgi/src/j3/J3Mgr.java (original)
+++ vmkit/trunk/incinerator/osgi/src/j3/J3Mgr.java Thu Apr 25 12:19:41 2013
@@ -1,16 +1,14 @@
 package j3;
 
-import org.osgi.framework.Bundle;
-
 public interface J3Mgr
 {
-	public void setBundleStaleReferenceCorrected(Bundle bundle, boolean corrected) throws Exception;
-	public boolean isBundleStaleReferenceCorrected(Bundle bundle) throws Exception;
+	public void setBundleStaleReferenceCorrected(long bundleID, boolean corrected) throws Exception;
+	public boolean isBundleStaleReferenceCorrected(long bundleID) throws Exception;
 	
 	// THE FOLLOWING METHODS ARE DEBUGGING HELPERS
 	// THEY SHOULD BE REMOVED IN PRODUCTION
 	
 	public void dumpClassLoaderBundles();
-	public void setBundleStaleReferenceCorrected(String bundleName, String corrected) throws Exception;
-	public void isBundleStaleReferenceCorrected(String bundleName) throws Exception;
+	public void setBundleStaleReferenceCorrected(String bundleNameOrID, String corrected) throws Exception;
+	public void isBundleStaleReferenceCorrected(String bundleNameOrID) throws Exception;
 }

Modified: vmkit/trunk/incinerator/osgi/src/j3mgr/J3MgrImpl.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/osgi/src/j3mgr/J3MgrImpl.java?rev=180522&r1=180521&r2=180522&view=diff
==============================================================================
--- vmkit/trunk/incinerator/osgi/src/j3mgr/J3MgrImpl.java (original)
+++ vmkit/trunk/incinerator/osgi/src/j3mgr/J3MgrImpl.java Thu Apr 25 12:19:41 2013
@@ -27,14 +27,19 @@ public class J3MgrImpl
 		context = null;
 	}
 
-	public void setBundleStaleReferenceCorrected(Bundle bundle, boolean corrected) throws Exception
+	public void setBundleStaleReferenceCorrected(long bundleID, boolean corrected) throws Exception
 	{
-		j3.vm.OSGi.setBundleStaleReferenceCorrected(bundle.getBundleId(), corrected);
+		j3.vm.OSGi.setBundleStaleReferenceCorrected(bundleID, corrected);
+		
+		if (corrected && (context.getBundle(bundleID) == null)) {
+			j3.vm.OSGi.notifyBundleUninstalled(bundleID);
+			refreshFramework();
+		}
 	}
 
-	public boolean isBundleStaleReferenceCorrected(Bundle bundle) throws Exception
+	public boolean isBundleStaleReferenceCorrected(long bundleID) throws Exception
 	{
-		return j3.vm.OSGi.isBundleStaleReferenceCorrected(bundle.getBundleId());
+		return j3.vm.OSGi.isBundleStaleReferenceCorrected(bundleID);
 	}
 
 	public void bundleChanged(BundleEvent event)
@@ -56,25 +61,38 @@ public class J3MgrImpl
 	// THE FOLLOWING METHODS ARE DEBUGGING HELPERS
 	// THEY SHOULD BE REMOVED IN PRODUCTION
 	
-	public void setBundleStaleReferenceCorrected(String bundleName, String corrected) throws Exception
+	public void setBundleStaleReferenceCorrected(String bundleNameOrID, String corrected) throws Exception
 	{
-		setBundleStaleReferenceCorrected(getBundle(bundleName), corrected.equals("yes"));
+		long bundleID = getBundleID(bundleNameOrID);
+		setBundleStaleReferenceCorrected(bundleID, corrected.equals("yes"));
 	}
 	
-	public void isBundleStaleReferenceCorrected(String bundleName) throws Exception
+	public void isBundleStaleReferenceCorrected(String bundleNameOrID) throws Exception
 	{
-		boolean value = isBundleStaleReferenceCorrected(getBundle(bundleName));
-		System.out.println("isBundleStaleReferenceCorrected(" + bundleName + ") = " + (value ? "yes" : "no"));
+		long bundleID = getBundleID(bundleNameOrID);
+		boolean value = isBundleStaleReferenceCorrected(bundleID);
+		System.out.println("isBundleStaleReferenceCorrected(bundleID=" + bundleID + ") = " + (value ? "yes" : "no"));
 	}
 
-	Bundle getBundle(String symbolicName)
+	long getBundleID(String symbolicNameOrID)
 	{
+		try {
+			long bundleID = Long.parseLong(symbolicNameOrID);
+			
+			if (context.getBundle(bundleID) == null)
+				System.out.println("WARNING: bundleID=" + bundleID + " is invalid.");
+			
+			return (bundleID < 0) ? -1 : bundleID;
+		} catch (NumberFormatException e) {
+			// This is not a bundle ID, it must be a symbolic name
+		}
+		
 		Bundle[] bundles = context.getBundles();
 		for (int i=0; i < bundles.length; ++i) {
-			if (symbolicName.equals(bundles[i].getSymbolicName()))
-				return bundles[i];
+			if (symbolicNameOrID.equals(bundles[i].getSymbolicName()))
+				return bundles[i].getBundleId();
 		}
-		return null;
+		return -1;
 	}
 
 	public void dumpClassLoaderBundles()

Modified: vmkit/trunk/incinerator/tests/debug.txt
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/incinerator/tests/debug.txt?rev=180522&r1=180521&r2=180522&view=diff
==============================================================================
--- vmkit/trunk/incinerator/tests/debug.txt (original)
+++ vmkit/trunk/incinerator/tests/debug.txt Thu Apr 25 12:19:41 2013
@@ -9,3 +9,8 @@ stop 14
 
 start 12 13 14
 stop 12
+
+framework call j3.J3Mgr isBundleStaleReferenceCorrected 39
+framework call j3.J3Mgr setBundleStaleReferenceCorrected 15 yes
+
+framework call j3.J3Mgr dumpClassLoaderBundles





More information about the vmkit-commits mailing list