[vmkit-commits] [vmkit] r180308 - Correcting stale references problem. Testing...
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 09:54:38 PDT 2013
Author: peter.senna
Date: Thu Apr 25 11:52:43 2013
New Revision: 180308
URL: http://llvm.org/viewvc/llvm-project?rev=180308&view=rev
Log:
Correcting stale references problem. Testing...
(cherry picked from commit e5d39d549b2f0b752968ff253044af9e4049a590)
Added:
vmkit/trunk/knopflerfish.patch
vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp
vmkit/trunk/osgi/
vmkit/trunk/osgi/.classpath
vmkit/trunk/osgi/.project
vmkit/trunk/osgi/META-INF/
vmkit/trunk/osgi/META-INF/MANIFEST.MF
vmkit/trunk/osgi/build.properties
vmkit/trunk/osgi/src/
vmkit/trunk/osgi/src/j3/
vmkit/trunk/osgi/src/j3/J3Mgr.java
vmkit/trunk/osgi/src/j3/vm/
vmkit/trunk/osgi/src/j3/vm/OSGi.java
vmkit/trunk/osgi/src/j3mgr/
vmkit/trunk/osgi/src/j3mgr/Activator.java
vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java
vmkit/trunk/tests/debug.txt
vmkit/trunk/tests/ijvm.tests.A/
vmkit/trunk/tests/ijvm.tests.A/.classpath
vmkit/trunk/tests/ijvm.tests.A/.project
vmkit/trunk/tests/ijvm.tests.A/META-INF/
vmkit/trunk/tests/ijvm.tests.A/META-INF/MANIFEST.MF
vmkit/trunk/tests/ijvm.tests.A/build.properties
vmkit/trunk/tests/ijvm.tests.A/src/
vmkit/trunk/tests/ijvm.tests.A/src/ijvm/
vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/
vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/
vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java
vmkit/trunk/tests/ijvm.tests.AImpl/
vmkit/trunk/tests/ijvm.tests.AImpl/.classpath
vmkit/trunk/tests/ijvm.tests.AImpl/.project
vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/
vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/MANIFEST.MF
vmkit/trunk/tests/ijvm.tests.AImpl/build.properties
vmkit/trunk/tests/ijvm.tests.AImpl/src/
vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/
vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/
vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/
vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java
vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java
vmkit/trunk/tests/ijvm.tests.BImpl/
vmkit/trunk/tests/ijvm.tests.BImpl/.classpath
vmkit/trunk/tests/ijvm.tests.BImpl/.project
vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/
vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/MANIFEST.MF
vmkit/trunk/tests/ijvm.tests.BImpl/build.properties
vmkit/trunk/tests/ijvm.tests.BImpl/src/
vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/
vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/
vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/
vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/B.java
vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/
vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java
vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/BImpl.java
vmkit/trunk/tests/ijvm.tests.C/
vmkit/trunk/tests/ijvm.tests.C/.classpath
vmkit/trunk/tests/ijvm.tests.C/.project
vmkit/trunk/tests/ijvm.tests.C/META-INF/
vmkit/trunk/tests/ijvm.tests.C/META-INF/MANIFEST.MF
vmkit/trunk/tests/ijvm.tests.C/build.properties
vmkit/trunk/tests/ijvm.tests.C/src/
vmkit/trunk/tests/ijvm.tests.C/src/ijvm/
vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/
vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/
vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java
vmkit/trunk/tests/ijvm.tests.CImpl/
vmkit/trunk/tests/ijvm.tests.CImpl/.classpath
vmkit/trunk/tests/ijvm.tests.CImpl/.project
vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/
vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/MANIFEST.MF
vmkit/trunk/tests/ijvm.tests.CImpl/build.properties
vmkit/trunk/tests/ijvm.tests.CImpl/src/
vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/
vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/
vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/
vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java
vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java
vmkit/trunk/tests/ijvm.tests.DImpl/
vmkit/trunk/tests/ijvm.tests.DImpl/.classpath
vmkit/trunk/tests/ijvm.tests.DImpl/.project
vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/
vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/MANIFEST.MF
vmkit/trunk/tests/ijvm.tests.DImpl/build.properties
vmkit/trunk/tests/ijvm.tests.DImpl/src/
vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/
vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/
vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/
vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/D.java
vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/
vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java
vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/DImpl.java
vmkit/trunk/tests/ijvm.tests.Runner/
vmkit/trunk/tests/ijvm.tests.Runner/.classpath
vmkit/trunk/tests/ijvm.tests.Runner/.project
vmkit/trunk/tests/ijvm.tests.Runner/META-INF/
vmkit/trunk/tests/ijvm.tests.Runner/META-INF/MANIFEST.MF
vmkit/trunk/tests/ijvm.tests.Runner/build.properties
vmkit/trunk/tests/ijvm.tests.Runner/src/
vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/
vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/
vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/
vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java
vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java
vmkit/trunk/tests/minimal.xargs
Modified:
vmkit/trunk/README.TXT
vmkit/trunk/include/vmkit/Locks.h
vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
vmkit/trunk/lib/j3/VMCore/Jnjvm.h
vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp
vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp
Modified: vmkit/trunk/README.TXT
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/README.TXT?rev=180308&r1=180307&r2=180308&view=diff
==============================================================================
--- vmkit/trunk/README.TXT (original)
+++ vmkit/trunk/README.TXT Thu Apr 25 11:52:43 2013
@@ -93,3 +93,16 @@ svn co http://llvm.org/svn/llvm-project/
./configure --with-llvmsrc=/home/koutheir/PhD/VMKit/llvm --with-llvmobj=/home/koutheir/PhD/VMKit/llvm --with-gnu-classpath-libs=/home/koutheir/PhD/VMKit/classpath/lib --with-gnu-classpath-glibj=/usr/local/classpath/share/classpath/glibj.zip
make -j12 ENABLE_OPTIMIZED=0 REQUIRES_FRAME_POINTER=1 KEEP_SYMBOLS=1 DEBUG_RUNTIME=1 DEBUG_SYMBOLS=1
+
+=============
+Knopflerfish:
+=============
+
+* Apply patch:
+cd knopflerfish
+patch -p1 < ../ijvm/knopflerfish.patch
+cd ..
+
+* Recompile Knopflerfish:
+cd knopflerfish/osgi
+ant default
Modified: vmkit/trunk/include/vmkit/Locks.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/Locks.h?rev=180308&r1=180307&r2=180308&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/Locks.h (original)
+++ vmkit/trunk/include/vmkit/Locks.h Thu Apr 25 11:52:43 2013
@@ -176,6 +176,28 @@ public:
};
+class LockGuard
+{
+protected:
+ Lock& lock;
+
+private: //Disabled constructors
+ LockGuard();
+ LockGuard(const LockGuard&);
+
+public:
+ LockGuard(Lock& l) :
+ lock(l)
+ {
+ lock.lock();
+ }
+
+ virtual ~LockGuard()
+ {
+ lock.unlock();
+ }
+};
+
} // end namespace vmkit
#endif // VMKIT_LOCKS_H
Added: vmkit/trunk/knopflerfish.patch
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/knopflerfish.patch?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/knopflerfish.patch (added)
+++ vmkit/trunk/knopflerfish.patch Thu Apr 25 11:52:43 2013
@@ -0,0 +1,29 @@
+Index: knopflerfish/osgi/framework/src/j3/vm/OSGi.java
+===================================================================
+--- knopflerfish/osgi/framework/src/j3/vm/OSGi.java 1970-01-01 01:00:00.000000000 +0100
++++ knopflerfish/osgi/framework/src/j3/vm/OSGi.java 2012-10-27 00:08:43.000000000 +0200
+@@ -0,0 +1,6 @@
++package j3.vm;
++
++public class OSGi
++{
++ public static native void associateBundleClass(long bundleID, Class classObject);
++}
+Index: knopflerfish/osgi/framework/src/org/knopflerfish/framework/BundleClassLoader.java
+===================================================================
+--- knopflerfish/osgi/framework/src/org/knopflerfish/framework/BundleClassLoader.java 2012-10-27 02:29:49.852807353 +0200
++++ knopflerfish/osgi/framework/src/org/knopflerfish/framework/BundleClassLoader.java 2012-10-27 02:36:22.287024825 +0200
+@@ -819,9 +819,12 @@
+ }
+ Vector av = classPath.componentExists(path, onlyFirst);
+ if (av != null) {
+ try {
+- return action.get(av, path, name, pkg, this);
++ Object cl = action.get(av, path, name, pkg, this);
++ if (cl instanceof Class)
++ j3.vm.OSGi.associateBundleClass(getBundle().getBundleId(), (Class)cl);
++ return cl;
+ } catch (IOException ioe) {
+ fwCtx.listeners.frameworkError(bpkgs.bg.bundle, ioe);
+ return null;
+ }
Modified: vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp?rev=180308&r1=180307&r2=180308&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp (original)
+++ vmkit/trunk/lib/j3/Compiler/JavaJIT.cpp Thu Apr 25 11:52:43 2013
@@ -1266,6 +1266,9 @@ llvm::Function* JavaJIT::javaCompile() {
}
}
+ if (compilingMethod->name->compare("ijvm_tests_Runner_loop") == 0) {
+ llvmFunction->dump();
+ }
return llvmFunction;
}
Modified: vmkit/trunk/lib/j3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jnjvm.h?rev=180308&r1=180307&r2=180308&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/j3/VMCore/Jnjvm.h Thu Apr 25 11:52:43 2013
@@ -11,6 +11,7 @@
#define JNJVM_JAVA_VM_H
#include <vector>
+#include <map>
#include "types.h"
@@ -351,10 +352,23 @@ public:
///
void loadBootstrap();
+public:
+ void resetReferencesToBundle(int64_t bundleID);
virtual void resetReferenceIfStale(const void* source, void** ref);
+
+ int64_t getClassLoaderBundleID(JnjvmClassLoader* loader);
+ JnjvmClassLoader* getBundleClassLoader(int64_t bundleID);
+ void setBundleClassLoader(int64_t bundleID, JnjvmClassLoader* loader);
+
+ typedef std::map<int64_t, JnjvmClassLoader*> bundleClassLoadersType;
+
+protected:
void resetReferenceIfStale(const JavaObject *source, class VMClassLoader** ref);
void resetReferenceIfStale(const JavaObject *source, class VMStaticInstance** ref);
void resetReferenceIfStale(const JavaObject *source, class JavaObject** ref);
+
+ vmkit::LockRecursive bundleClassLoadersLock;
+ bundleClassLoadersType bundleClassLoaders;
};
} // end namespace j3
Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp?rev=180308&r1=180307&r2=180308&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.cpp Thu Apr 25 11:52:43 2013
@@ -240,6 +240,24 @@ JnjvmClassLoader::JnjvmClassLoader(vmkit
assert(loadClass && "Loader does not have a loadClass function");
}
+int64_t JnjvmClassLoader::getAssociatedBundleID()
+{
+ return vm->getClassLoaderBundleID(this);
+}
+
+void JnjvmClassLoader::setAssociatedBundleID(int64_t newID)
+{
+ int64_t oldBundleID = vm->getClassLoaderBundleID(this);
+ if (oldBundleID != -1) {
+ if (oldBundleID == newID) return; // Nothing to do
+
+ // Remove old bundle ID
+ vm->setBundleClassLoader(oldBundleID, NULL);
+ }
+
+ vm->setBundleClassLoader(newID, this);
+}
+
void JnjvmClassLoader::setCompiler(JavaCompiler* Comp) {
// Set the new compiler.
TheCompiler = Comp;
Modified: vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h?rev=180308&r1=180307&r2=180308&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmClassLoader.h Thu Apr 25 11:52:43 2013
@@ -331,6 +331,9 @@ public:
bool isZombie() const {return zombie;}
void markZombie(bool becomeZombie = true) {zombie = becomeZombie;}
+ int64_t getAssociatedBundleID();
+ void setAssociatedBundleID(int64_t newID);
+
friend class Class;
friend class CommonClass;
friend class StringList;
Added: vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp (added)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmIntOSGi.cpp Thu Apr 25 11:52:43 2013
@@ -0,0 +1,67 @@
+
+#include <algorithm>
+
+#include "VmkitGC.h"
+#include "Jnjvm.h"
+#include "ClasspathReflect.h"
+#include "j3/jni.h"
+
+namespace j3 {
+
+JnjvmClassLoader* Jnjvm::getBundleClassLoader(int64_t bundleID)
+{
+ if (bundleID == -1) return NULL;
+ vmkit::LockGuard lg(bundleClassLoadersLock);
+
+ bundleClassLoadersType::const_iterator i = bundleClassLoaders.find(bundleID);
+ return (i == bundleClassLoaders.end()) ? NULL : i->second;
+}
+
+struct Jnjvm_getClassLoaderBundleID_finder {
+ JnjvmClassLoader* loader;
+ Jnjvm_getClassLoaderBundleID_finder(JnjvmClassLoader* l) : loader(l) {}
+ bool operator() (const Jnjvm::bundleClassLoadersType::value_type& pair) {return pair.second == loader;}
+};
+
+int64_t Jnjvm::getClassLoaderBundleID(JnjvmClassLoader* loader)
+{
+ if (loader == NULL) return -1;
+ vmkit::LockGuard lg(bundleClassLoadersLock);
+
+ bundleClassLoadersType::const_iterator
+ first = bundleClassLoaders.begin(),
+ last = bundleClassLoaders.end(),
+ i = std::find_if(first, last, Jnjvm_getClassLoaderBundleID_finder(loader));
+
+ return (i == last) ? -1 : i->first;
+}
+
+void Jnjvm::setBundleClassLoader(int64_t bundleID, JnjvmClassLoader* loader)
+{
+ if (bundleID == -1) return;
+ vmkit::LockGuard lg(bundleClassLoadersLock);
+
+ if (!loader)
+ bundleClassLoaders.erase(bundleID);
+ else
+ bundleClassLoaders[bundleID] = loader;
+}
+
+}
+
+
+using namespace j3;
+
+extern "C" void Java_j3_vm_OSGi_associateBundleClass(jlong bundleID, JavaObjectClass* classObject)
+{
+ llvm_gcroot(classObject, 0);
+
+ CommonClass* ccl = JavaObjectClass::getClass(classObject);
+ ccl->classLoader->setAssociatedBundleID(bundleID);
+}
+
+extern "C" void Java_j3_vm_OSGi_resetReferencesToBundle(jlong bundleID)
+{
+ Jnjvm* vm = JavaThread::get()->getJVM();
+ vm->resetReferencesToBundle(bundleID);
+}
Modified: vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp?rev=180308&r1=180307&r2=180308&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp Thu Apr 25 11:52:43 2013
@@ -9,6 +9,16 @@ using namespace std;
namespace j3 {
+void Jnjvm::resetReferencesToBundle(int64_t bundleID)
+{
+ JnjvmClassLoader* loader = this->getBundleClassLoader(bundleID);
+ assert(loader && "No class loader is associated with the bundle");
+
+ loader->markZombie();
+
+ vmkit::Collector::collect();
+}
+
void Jnjvm::resetReferenceIfStale(const void* source, void** ref)
{
if (!ref || !(*ref)) return;
@@ -29,6 +39,40 @@ void Jnjvm::resetReferenceIfStale(const
}
}
+void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMClassLoader** ref)
+{
+ // Don't touch fake Java objects that exist only as bridges between the
+ // Java object model and the C++ object model.
+
+#if DEBUG_VERBOSE_STALE_REF
+
+ JnjvmClassLoader* loader = (**ref).getClassLoader();
+ if (!loader->isZombie()) return;
+
+ cerr << "WARNING: Ignored stale reference ref=" << ref << " obj=" << **ref;
+ if (source) cerr << " source=" << *source;
+ cerr << endl;
+
+#endif
+}
+
+void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMStaticInstance** ref)
+{
+ // Don't touch fake Java objects that exist only as bridges between the
+ // Java object model and the C++ object model.
+
+#if DEBUG_VERBOSE_STALE_REF
+
+ JnjvmClassLoader* loader = (**ref).getOwningClass()->classLoader;
+ if (!loader->isZombie()) return;
+
+ cerr << "WARNING: Ignored stale reference ref=" << ref << " obj=" << **ref;
+ if (source) cerr << " source=" << *source;
+ cerr << endl;
+
+#endif
+}
+
void Jnjvm::resetReferenceIfStale(const JavaObject *source, JavaObject** ref)
{
#if DEBUG_VERBOSE_STALE_REF
@@ -69,38 +113,4 @@ void Jnjvm::resetReferenceIfStale(const
*ref = NULL; // Reset the reference
}
-void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMClassLoader** ref)
-{
- // Don't touch fake Java objects that exist only as bridges between the
- // Java object model and the C++ object model.
-
-#if DEBUG_VERBOSE_STALE_REF
-
- JnjvmClassLoader* loader = (**ref).getClassLoader();
- if (!loader->isZombie()) return;
-
- cerr << "WARNING: Ignored stale reference ref=" << ref << " obj=" << **ref;
- if (source) cerr << " source=" << *source;
- cerr << endl;
-
-#endif
-}
-
-void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMStaticInstance** ref)
-{
- // Don't touch fake Java objects that exist only as bridges between the
- // Java object model and the C++ object model.
-
-#if DEBUG_VERBOSE_STALE_REF
-
- JnjvmClassLoader* loader = (**ref).getOwningClass()->classLoader;
- if (!loader->isZombie()) return;
-
- cerr << "WARNING: Ignored stale reference ref=" << ref << " obj=" << **ref;
- if (source) cerr << " source=" << *source;
- cerr << endl;
-
-#endif
-}
-
}
Modified: vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp?rev=180308&r1=180307&r2=180308&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/VirtualTables.cpp Thu Apr 25 11:52:43 2013
@@ -187,8 +187,8 @@ void Class::tracer(word_t closure) {
for (uint32 i = 0; i < NR_ISOLATES; ++i) {
TaskClassMirror &M = IsolateInfo[i];
if (M.staticInstance != NULL) {
- for (uint32 i = 0; i < nbStaticFields; ++i) {
- JavaField& field = staticFields[i];
+ for (uint32 j = 0; j < nbStaticFields; ++j) {
+ JavaField& field = staticFields[j];
if (field.isReference()) {
JavaObject** ptr = field.getStaticObjectFieldPtr();
vmkit::Collector::markAndTraceRoot(delegatee[i], ptr, closure);
Added: vmkit/trunk/osgi/.classpath
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/.classpath?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/osgi/.classpath (added)
+++ vmkit/trunk/osgi/.classpath Thu Apr 25 11:52:43 2013
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: vmkit/trunk/osgi/.project
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/.project?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/osgi/.project (added)
+++ vmkit/trunk/osgi/.project Thu Apr 25 11:52:43 2013
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>j3mgr</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: vmkit/trunk/osgi/META-INF/MANIFEST.MF
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/META-INF/MANIFEST.MF?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/osgi/META-INF/MANIFEST.MF (added)
+++ vmkit/trunk/osgi/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: J3 Virtual Machine Manager
+Bundle-SymbolicName: j3mgr;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-Activator: j3mgr.Activator
+Import-Package: org.osgi.framework;version="1.3.0",
+ org.osgi.service.packageadmin;version="1.0.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: j3
Added: vmkit/trunk/osgi/build.properties
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/build.properties?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/osgi/build.properties (added)
+++ vmkit/trunk/osgi/build.properties Thu Apr 25 11:52:43 2013
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
Added: vmkit/trunk/osgi/src/j3/J3Mgr.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3/J3Mgr.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/osgi/src/j3/J3Mgr.java (added)
+++ vmkit/trunk/osgi/src/j3/J3Mgr.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,13 @@
+package j3;
+
+import org.osgi.framework.Bundle;
+
+public interface J3Mgr
+{
+ public void resetReferencesToBundle(Bundle bundle) throws Exception;
+
+ // THE FOLLOWING METHODS ARE DEBUGGING HELPERS
+ // THEY SHOULD BE REMOVED IN PRODUCTION
+
+ public void resetReferencesToBundle(String bundleName) throws Exception;
+}
Added: vmkit/trunk/osgi/src/j3/vm/OSGi.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3/vm/OSGi.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/osgi/src/j3/vm/OSGi.java (added)
+++ vmkit/trunk/osgi/src/j3/vm/OSGi.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,7 @@
+package j3.vm;
+
+public class OSGi
+{
+ public static native void associateBundleClass(long bundleID, Class classObject);
+ public static native void resetReferencesToBundle(long bundleID);
+}
Added: vmkit/trunk/osgi/src/j3mgr/Activator.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3mgr/Activator.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/osgi/src/j3mgr/Activator.java (added)
+++ vmkit/trunk/osgi/src/j3mgr/Activator.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,32 @@
+package j3mgr;
+
+import j3.J3Mgr;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator
+ implements BundleActivator
+{
+ J3MgrImpl mgr;
+
+ public void start(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("J3MgrImpl exports and provides J3Mgr");
+
+ mgr = new J3MgrImpl();
+ mgr.open(bundleContext);
+
+ bundleContext.registerService(J3Mgr.class.getName(), mgr, null);
+ }
+
+ public void stop(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("J3MgrImpl no more provides J3Mgr");
+
+ if (mgr != null) {
+ mgr.close();
+ mgr = null;
+ }
+ }
+}
Added: vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java (added)
+++ vmkit/trunk/osgi/src/j3mgr/J3MgrImpl.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,89 @@
+package j3mgr;
+
+import j3.J3Mgr;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.packageadmin.PackageAdmin;
+
+public class J3MgrImpl
+ implements J3Mgr, FrameworkListener
+{
+ BundleContext context;
+ long bundleToKill;
+
+ public J3MgrImpl()
+ {
+ bundleToKill = -1;
+ }
+
+ public void open(BundleContext bundleContext)
+ {
+ context = bundleContext;
+
+ // We need to know when packages are refreshed
+ context.addFrameworkListener(this);
+ }
+
+ public void close()
+ {
+ context.removeFrameworkListener(this);
+ context = null;
+ }
+
+ public void resetReferencesToBundle(Bundle bundle) throws Exception
+ {
+ System.out.println("resetReferencesToBundle: #" + bundle.getBundleId() + " " + bundle.getSymbolicName());
+
+ bundleToKill = bundle.getBundleId();
+
+ System.out.println("Stopping bundle: " + bundle.getSymbolicName());
+ bundle.stop();
+ System.out.println("Uninstalling bundle: " + bundle.getSymbolicName());
+ bundle.uninstall();
+
+ System.out.println("Refreshing framework...");
+ refreshFramework(bundle);
+ }
+
+ void refreshFramework(Bundle bundle)
+ {
+ ServiceReference<?> pkgAdminRef = (ServiceReference<?>)context.getServiceReference(
+ "org.osgi.service.packageadmin.PackageAdmin");
+ PackageAdmin pkgAdmin = (PackageAdmin)context.getService(pkgAdminRef);
+ pkgAdmin.refreshPackages(new Bundle[] {bundle});
+ }
+
+ public void frameworkEvent(FrameworkEvent event)
+ {
+ if (event.getType() != FrameworkEvent.PACKAGES_REFRESHED) return;
+
+ if (bundleToKill == -1) return;
+
+ System.out.println("Resetting stale references to bundle #" + bundleToKill);
+ j3.vm.OSGi.resetReferencesToBundle(bundleToKill);
+
+ bundleToKill = -1;
+ }
+
+ // THE FOLLOWING METHODS ARE DEBUGGING HELPERS
+ // THEY SHOULD BE REMOVED IN PRODUCTION
+
+ public void resetReferencesToBundle(String bundleName) throws Exception
+ {
+ resetReferencesToBundle(getBundle(bundleName));
+ }
+
+ Bundle getBundle(String symbolicName)
+ {
+ Bundle[] bundles = context.getBundles();
+ for (int i=0; i < bundles.length; ++i) {
+ if (symbolicName.equals(bundles[i].getSymbolicName()))
+ return bundles[i];
+ }
+ return null;
+ }
+}
Added: vmkit/trunk/tests/debug.txt
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/debug.txt?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/debug.txt (added)
+++ vmkit/trunk/tests/debug.txt Thu Apr 25 11:52:43 2013
@@ -0,0 +1,3 @@
+framework call j3.J3Mgr resetReferencesToBundle ijvm.tests.AImpl
+
+framework meminfo -gc
Added: vmkit/trunk/tests/ijvm.tests.A/.classpath
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/.classpath?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.A/.classpath (added)
+++ vmkit/trunk/tests/ijvm.tests.A/.classpath Thu Apr 25 11:52:43 2013
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: vmkit/trunk/tests/ijvm.tests.A/.project
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/.project?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.A/.project (added)
+++ vmkit/trunk/tests/ijvm.tests.A/.project Thu Apr 25 11:52:43 2013
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ijvm.tests.A</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: vmkit/trunk/tests/ijvm.tests.A/META-INF/MANIFEST.MF
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/META-INF/MANIFEST.MF?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.A/META-INF/MANIFEST.MF (added)
+++ vmkit/trunk/tests/ijvm.tests.A/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: A
+Bundle-SymbolicName: ijvm.tests.A;singleton:=true
+Bundle-Version: 1.0.0
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: ijvm.tests.A
Added: vmkit/trunk/tests/ijvm.tests.A/build.properties
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/build.properties?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.A/build.properties (added)
+++ vmkit/trunk/tests/ijvm.tests.A/build.properties Thu Apr 25 11:52:43 2013
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
Added: vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java (added)
+++ vmkit/trunk/tests/ijvm.tests.A/src/ijvm/tests/A/A.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,6 @@
+package ijvm.tests.A;
+
+public interface A
+{
+ public void performA();
+}
Added: vmkit/trunk/tests/ijvm.tests.AImpl/.classpath
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/.classpath?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.AImpl/.classpath (added)
+++ vmkit/trunk/tests/ijvm.tests.AImpl/.classpath Thu Apr 25 11:52:43 2013
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: vmkit/trunk/tests/ijvm.tests.AImpl/.project
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/.project?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.AImpl/.project (added)
+++ vmkit/trunk/tests/ijvm.tests.AImpl/.project Thu Apr 25 11:52:43 2013
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ijvm.tests.AImpl</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/MANIFEST.MF
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/MANIFEST.MF?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/MANIFEST.MF (added)
+++ vmkit/trunk/tests/ijvm.tests.AImpl/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: A Implementation
+Bundle-SymbolicName: ijvm.tests.AImpl
+Bundle-Version: 1.0.0
+Bundle-Activator: ijvm.tests.AImpl.Activator
+Import-Package: ijvm.tests.A,
+ ijvm.tests.C,
+ org.osgi.framework;version="1.3.0",
+ org.osgi.util.tracker;version="1.0.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
Added: vmkit/trunk/tests/ijvm.tests.AImpl/build.properties
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/build.properties?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.AImpl/build.properties (added)
+++ vmkit/trunk/tests/ijvm.tests.AImpl/build.properties Thu Apr 25 11:52:43 2013
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
Added: vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java (added)
+++ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/AImpl.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,12 @@
+package ijvm.tests.AImpl;
+
+import ijvm.tests.A.A;
+
+public class AImpl
+ implements A
+{
+ public void performA()
+ {
+ System.out.println("AImpl.performA");
+ }
+}
Added: vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java (added)
+++ vmkit/trunk/tests/ijvm.tests.AImpl/src/ijvm/tests/AImpl/Activator.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,82 @@
+package ijvm.tests.AImpl;
+
+import java.util.ArrayList;
+
+import ijvm.tests.A.A;
+import ijvm.tests.C.C;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator
+ implements BundleActivator, ServiceListener
+{
+ private BundleContext context;
+ private ServiceTracker cST;
+ private ArrayList<C> c;
+ private A a;
+
+ public Activator()
+ {
+ c = new ArrayList<C>();
+ }
+
+ public void start(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("AImpl provides A");
+ context = bundleContext;
+
+ cST = new ServiceTracker(context, C.class.getName(), null);
+ cST.open();
+
+ C service = (C)cST.getService();
+ if (service != null)
+ c.add(service);
+
+ context.addServiceListener(this, "(objectclass=" + C.class.getName() + ")");
+
+ if (c != null)
+ System.out.println("AImpl got C @ startup");
+
+ a = new AImpl();
+ context.registerService(A.class.getName(), a, null);
+ }
+
+ public void stop(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("AImpl no more provides A");
+
+ context.removeServiceListener(this);
+ context = null;
+
+ System.out.println("AImpl lost C but keeps a stale reference to it");
+ cST.close();
+ cST = null;
+ // c = null;
+
+ a = null;
+ }
+
+ public void serviceChanged(ServiceEvent event)
+ {
+ Object service = context.getService(event.getServiceReference());
+
+ switch(event.getType()) {
+ case ServiceEvent.REGISTERED:
+ if (C.class.isInstance(service)) {
+ System.out.println("AImpl got C");
+ c.add((C)service);
+ }
+ break;
+
+ case ServiceEvent.UNREGISTERING:
+ if (C.class.isInstance(service)) {
+ System.out.println("AImpl lost C but keeps a stale reference to it");
+ }
+ break;
+ }
+ }
+}
Added: vmkit/trunk/tests/ijvm.tests.BImpl/.classpath
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/.classpath?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.BImpl/.classpath (added)
+++ vmkit/trunk/tests/ijvm.tests.BImpl/.classpath Thu Apr 25 11:52:43 2013
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: vmkit/trunk/tests/ijvm.tests.BImpl/.project
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/.project?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.BImpl/.project (added)
+++ vmkit/trunk/tests/ijvm.tests.BImpl/.project Thu Apr 25 11:52:43 2013
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ijvm.tests.BImpl</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/MANIFEST.MF
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/MANIFEST.MF?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/MANIFEST.MF (added)
+++ vmkit/trunk/tests/ijvm.tests.BImpl/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: B Implementation
+Bundle-SymbolicName: ijvm.tests.BImpl
+Bundle-Version: 1.0.0
+Bundle-Activator: ijvm.tests.BImpl.Activator
+Import-Package: ijvm.tests.A,
+ org.osgi.framework;version="1.3.0",
+ org.osgi.util.tracker;version="1.0.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: ijvm.tests.B
Added: vmkit/trunk/tests/ijvm.tests.BImpl/build.properties
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/build.properties?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.BImpl/build.properties (added)
+++ vmkit/trunk/tests/ijvm.tests.BImpl/build.properties Thu Apr 25 11:52:43 2013
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
Added: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/B.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/B.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/B.java (added)
+++ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/B/B.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,6 @@
+package ijvm.tests.B;
+
+public interface B
+{
+ public void performB();
+}
Added: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java (added)
+++ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/Activator.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,83 @@
+package ijvm.tests.BImpl;
+
+import java.util.ArrayList;
+
+import ijvm.tests.A.A;
+import ijvm.tests.B.B;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator
+ implements BundleActivator, ServiceListener
+{
+ private BundleContext context;
+
+ private ServiceTracker aST;
+ private ArrayList<A> a;
+ private BImpl b;
+
+ public Activator()
+ {
+ a = new ArrayList<A>();
+ }
+
+ public void start(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("BImpl exports and provides B");
+ context = bundleContext;
+
+ aST = new ServiceTracker(context, A.class.getName(), null);
+ aST.open();
+
+ A service = (A)aST.getService();
+ if (service != null)
+ a.add(service);
+
+ context.addServiceListener(this, "(objectclass=" + A.class.getName() + ")");
+
+ if (a != null)
+ System.out.println("BImpl got A @ startup");
+
+ b = new BImpl();
+ context.registerService(B.class.getName(), b, null);
+ }
+
+ public void stop(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("BImpl no more provides B");
+
+ context.removeServiceListener(this);
+ context = null;
+
+ System.out.println("BImpl lost A but keeps a stale reference to it");
+ aST.close();
+ aST = null;
+ // a = null;
+
+ b = null;
+ }
+
+ public void serviceChanged(ServiceEvent event)
+ {
+ Object service = context.getService(event.getServiceReference());
+
+ switch(event.getType()) {
+ case ServiceEvent.REGISTERED:
+ if (A.class.isInstance(service)) {
+ System.out.println("BImpl got A");
+ a.add((A)service);
+ }
+ break;
+
+ case ServiceEvent.UNREGISTERING:
+ if (A.class.isInstance(service)) {
+ System.out.println("BImpl lost A but keeps a stale reference to it");
+ }
+ break;
+ }
+ }
+}
Added: vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/BImpl.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/BImpl.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/BImpl.java (added)
+++ vmkit/trunk/tests/ijvm.tests.BImpl/src/ijvm/tests/BImpl/BImpl.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,12 @@
+package ijvm.tests.BImpl;
+
+import ijvm.tests.B.B;
+
+public class BImpl
+ implements B
+{
+ public void performB()
+ {
+ System.out.println("BImpl.performB");
+ }
+}
Added: vmkit/trunk/tests/ijvm.tests.C/.classpath
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/.classpath?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.C/.classpath (added)
+++ vmkit/trunk/tests/ijvm.tests.C/.classpath Thu Apr 25 11:52:43 2013
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: vmkit/trunk/tests/ijvm.tests.C/.project
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/.project?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.C/.project (added)
+++ vmkit/trunk/tests/ijvm.tests.C/.project Thu Apr 25 11:52:43 2013
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ijvm.tests.C</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: vmkit/trunk/tests/ijvm.tests.C/META-INF/MANIFEST.MF
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/META-INF/MANIFEST.MF?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.C/META-INF/MANIFEST.MF (added)
+++ vmkit/trunk/tests/ijvm.tests.C/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: C
+Bundle-SymbolicName: ijvm.tests.C
+Bundle-Version: 1.0.0
+Import-Package: org.osgi.framework;version="1.3.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: ijvm.tests.C
Added: vmkit/trunk/tests/ijvm.tests.C/build.properties
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/build.properties?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.C/build.properties (added)
+++ vmkit/trunk/tests/ijvm.tests.C/build.properties Thu Apr 25 11:52:43 2013
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
Added: vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java (added)
+++ vmkit/trunk/tests/ijvm.tests.C/src/ijvm/tests/C/C.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,6 @@
+package ijvm.tests.C;
+
+public interface C
+{
+ public void performC();
+}
Added: vmkit/trunk/tests/ijvm.tests.CImpl/.classpath
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/.classpath?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.CImpl/.classpath (added)
+++ vmkit/trunk/tests/ijvm.tests.CImpl/.classpath Thu Apr 25 11:52:43 2013
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: vmkit/trunk/tests/ijvm.tests.CImpl/.project
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/.project?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.CImpl/.project (added)
+++ vmkit/trunk/tests/ijvm.tests.CImpl/.project Thu Apr 25 11:52:43 2013
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ijvm.tests.CImpl</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/MANIFEST.MF
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/MANIFEST.MF?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/MANIFEST.MF (added)
+++ vmkit/trunk/tests/ijvm.tests.CImpl/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: C Implementation
+Bundle-SymbolicName: ijvm.tests.CImpl
+Bundle-Version: 1.0.0
+Bundle-Activator: ijvm.tests.CImpl.Activator
+Import-Package: ijvm.tests.B,
+ ijvm.tests.C,
+ org.osgi.framework;version="1.3.0",
+ org.osgi.util.tracker;version="1.0.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
Added: vmkit/trunk/tests/ijvm.tests.CImpl/build.properties
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/build.properties?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.CImpl/build.properties (added)
+++ vmkit/trunk/tests/ijvm.tests.CImpl/build.properties Thu Apr 25 11:52:43 2013
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
Added: vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java (added)
+++ vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/Activator.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,83 @@
+package ijvm.tests.CImpl;
+
+import java.util.ArrayList;
+
+import ijvm.tests.B.B;
+import ijvm.tests.C.C;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator
+ implements BundleActivator, ServiceListener
+{
+ private BundleContext context;
+
+ private ServiceTracker bST;
+ private ArrayList<B> b;
+ private CImpl c;
+
+ public Activator()
+ {
+ b = new ArrayList<B>();
+ }
+
+ public void start(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("CImpl exports and provides C");
+ context = bundleContext;
+
+ bST = new ServiceTracker(context, B.class.getName(), null);
+ bST.open();
+
+ B service = (B)bST.getService();
+ if (service != null)
+ b.add(service);
+
+ context.addServiceListener(this, "(objectclass=" + B.class.getName() + ")");
+
+ if (b != null)
+ System.out.println("CImpl got B @ startup");
+
+ c = new CImpl();
+ context.registerService(C.class.getName(), c, null);
+ }
+
+ public void stop(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("CImpl no more provides C");
+
+ context.removeServiceListener(this);
+ context = null;
+
+ System.out.println("CImpl lost B but keeps a stale reference to it");
+ bST.close();
+ bST = null;
+ // b = null;
+
+ c = null;
+ }
+
+ public void serviceChanged(ServiceEvent event)
+ {
+ Object service = context.getService(event.getServiceReference());
+
+ switch(event.getType()) {
+ case ServiceEvent.REGISTERED:
+ if (B.class.isInstance(service)) {
+ System.out.println("CImpl got B");
+ b.add((B)service);
+ }
+ break;
+
+ case ServiceEvent.UNREGISTERING:
+ if (B.class.isInstance(service)) {
+ System.out.println("CImpl lost B but keeps a stale reference to it");
+ }
+ break;
+ }
+ }
+}
Added: vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java (added)
+++ vmkit/trunk/tests/ijvm.tests.CImpl/src/ijvm/tests/CImpl/CImpl.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,12 @@
+package ijvm.tests.CImpl;
+
+import ijvm.tests.C.C;
+
+public class CImpl
+ implements C
+{
+ public void performC()
+ {
+ System.out.println("CImpl.performC");
+ }
+}
Added: vmkit/trunk/tests/ijvm.tests.DImpl/.classpath
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/.classpath?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.DImpl/.classpath (added)
+++ vmkit/trunk/tests/ijvm.tests.DImpl/.classpath Thu Apr 25 11:52:43 2013
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: vmkit/trunk/tests/ijvm.tests.DImpl/.project
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/.project?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.DImpl/.project (added)
+++ vmkit/trunk/tests/ijvm.tests.DImpl/.project Thu Apr 25 11:52:43 2013
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ijvm.tests.DImpl</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/MANIFEST.MF
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/MANIFEST.MF?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/MANIFEST.MF (added)
+++ vmkit/trunk/tests/ijvm.tests.DImpl/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: D Implementation
+Bundle-SymbolicName: ijvm.tests.DImpl
+Bundle-Version: 1.0.0
+Bundle-Activator: ijvm.tests.DImpl.Activator
+Import-Package: ijvm.tests.C,
+ org.osgi.framework;version="1.3.0",
+ org.osgi.util.tracker;version="1.0.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: ijvm.tests.D
Added: vmkit/trunk/tests/ijvm.tests.DImpl/build.properties
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/build.properties?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.DImpl/build.properties (added)
+++ vmkit/trunk/tests/ijvm.tests.DImpl/build.properties Thu Apr 25 11:52:43 2013
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
Added: vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/D.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/D.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/D.java (added)
+++ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/D/D.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,6 @@
+package ijvm.tests.D;
+
+public interface D
+{
+ public void performD();
+}
Added: vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java (added)
+++ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/Activator.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,83 @@
+package ijvm.tests.DImpl;
+
+import java.util.ArrayList;
+
+import ijvm.tests.C.C;
+import ijvm.tests.D.D;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceListener;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator
+ implements BundleActivator, ServiceListener
+{
+ private BundleContext context;
+
+ private ServiceTracker cST;
+ private ArrayList<C> c;
+ private DImpl d;
+
+ public Activator()
+ {
+ c = new ArrayList<C>();
+ }
+
+ public void start(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("DImpl exports and provides D");
+ context = bundleContext;
+
+ cST = new ServiceTracker(context, C.class.getName(), null);
+ cST.open();
+
+ C service = (C)cST.getService();
+ if (service != null)
+ c.add(service);
+
+ context.addServiceListener(this, "(objectclass=" + C.class.getName() + ")");
+
+ if (c != null)
+ System.out.println("DImpl got C @ startup");
+
+ d = new DImpl();
+ context.registerService(D.class.getName(), d, null);
+ }
+
+ public void stop(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("DImpl no more provides D");
+
+ context.removeServiceListener(this);
+ context = null;
+
+ System.out.println("DImpl lost C but keeps a stale reference to it");
+ cST.close();
+ cST = null;
+ // c = null;
+
+ d = null;
+ }
+
+ public void serviceChanged(ServiceEvent event)
+ {
+ Object service = context.getService(event.getServiceReference());
+
+ switch(event.getType()) {
+ case ServiceEvent.REGISTERED:
+ if (C.class.isInstance(service)) {
+ System.out.println("DImpl got C");
+ c.add((C)service);
+ }
+ break;
+
+ case ServiceEvent.UNREGISTERING:
+ if (C.class.isInstance(service)) {
+ System.out.println("DImpl lost C but keeps a stale reference to it");
+ }
+ break;
+ }
+ }
+}
Added: vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/DImpl.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/DImpl.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/DImpl.java (added)
+++ vmkit/trunk/tests/ijvm.tests.DImpl/src/ijvm/tests/DImpl/DImpl.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,12 @@
+package ijvm.tests.DImpl;
+
+import ijvm.tests.D.D;
+
+public class DImpl
+ implements D
+{
+ public void performD()
+ {
+ System.out.println("DImpl.performB");
+ }
+}
Added: vmkit/trunk/tests/ijvm.tests.Runner/.classpath
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/.classpath?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.Runner/.classpath (added)
+++ vmkit/trunk/tests/ijvm.tests.Runner/.classpath Thu Apr 25 11:52:43 2013
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
Added: vmkit/trunk/tests/ijvm.tests.Runner/.project
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/.project?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.Runner/.project (added)
+++ vmkit/trunk/tests/ijvm.tests.Runner/.project Thu Apr 25 11:52:43 2013
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>ijvm.tests.Runner</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
Added: vmkit/trunk/tests/ijvm.tests.Runner/META-INF/MANIFEST.MF
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/META-INF/MANIFEST.MF?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.Runner/META-INF/MANIFEST.MF (added)
+++ vmkit/trunk/tests/ijvm.tests.Runner/META-INF/MANIFEST.MF Thu Apr 25 11:52:43 2013
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Runner
+Bundle-SymbolicName: ijvm.tests.Runner
+Bundle-Version: 1.0.0
+Bundle-Activator: ijvm.tests.Runner.Activator
+Import-Package: ijvm.tests.A,
+ org.osgi.framework;version="1.3.0",
+ org.osgi.util.tracker;version="1.0.0"
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
Added: vmkit/trunk/tests/ijvm.tests.Runner/build.properties
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/build.properties?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.Runner/build.properties (added)
+++ vmkit/trunk/tests/ijvm.tests.Runner/build.properties Thu Apr 25 11:52:43 2013
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
Added: vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java (added)
+++ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Activator.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,68 @@
+package ijvm.tests.Runner;
+
+import ijvm.tests.A.A;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleException;
+import org.osgi.util.tracker.ServiceTracker;
+
+public class Activator
+ implements BundleActivator, Runnable
+{
+ private BundleContext context;
+ private ServiceTracker aST;
+ private A a;
+ private Runner runner1, runner2;
+ private Thread runnerThread1, runnerThread2, cancellerThread;
+
+ public void start(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("Started runner bundle.");
+ context = bundleContext;
+
+ aST = new ServiceTracker(context, A.class.getName(), null);
+ aST.open();
+
+ a = (A)aST.getService();
+ if (a == null) {
+ aST.close();
+ aST = null;
+
+ throw new BundleException("Runner bundle could not get A @ startup");
+ }
+ System.out.println("Runner bundle got A @ startup.");
+
+ runnerThread1 = new Thread(runner1 = new Runner(a), "Runner 1");
+ runnerThread2 = new Thread(runner2 = new Runner(a), "Runner 2");
+ runnerThread1.start();
+ runnerThread2.start();
+
+ cancellerThread = new Thread(this, "Runner Canceller");
+ cancellerThread.start();
+ }
+
+ public void stop(BundleContext bundleContext) throws Exception
+ {
+ System.out.println("Stopped runner bundle.");
+
+ context = null;
+
+ System.out.println("Runner bundle lost A but keeps a stale reference to it");
+ aST.close();
+ aST = null;
+ // a = null;
+
+// runner.join();
+ }
+
+ public void run()
+ {
+ try {
+ Thread.sleep(5000);
+ runner1.cancel();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+}
Added: vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java (added)
+++ vmkit/trunk/tests/ijvm.tests.Runner/src/ijvm/tests/Runner/Runner.java Thu Apr 25 11:52:43 2013
@@ -0,0 +1,64 @@
+package ijvm.tests.Runner;
+
+public class Runner
+ implements Runnable
+{
+ private Object obj;
+ private static boolean sleeping;
+ private boolean cancelRunning;
+
+ {
+ sleeping = false;
+ }
+
+ public Runner(Object o)
+ {
+ cancelRunning = false;
+ obj = o;
+ }
+
+ public void cancel()
+ {
+ cancelRunning = false;
+ }
+
+ public void run()
+ {
+ System.out.println("Started runner thread: " + Thread.currentThread().getName());
+
+ try {
+ while (!cancelRunning) {
+ long delay = 2000 + (long)(Math.random() * 1000.0);
+
+ ijvm_tests_Runner_loop(delay);
+
+ Thread.sleep(200);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ System.out.println("Stopped runner thread: " + Thread.currentThread().getName());
+ }
+
+ void ijvm_tests_Runner_loop(long delay) throws Exception
+ {
+ synchronized(obj) {
+ iteration(delay);
+ }
+ }
+
+ void iteration(long delay) throws Exception
+ {
+ while (sleeping)
+ obj.wait();
+ sleeping = true;
+
+ System.out.println(Thread.currentThread().getName() + ": sleeping for " + delay);
+ Thread.sleep(delay);
+ System.out.println(Thread.currentThread().getName() + ": woke up");
+
+ sleeping = false;
+ obj.notifyAll();
+ }
+}
Added: vmkit/trunk/tests/minimal.xargs
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tests/minimal.xargs?rev=180308&view=auto
==============================================================================
--- vmkit/trunk/tests/minimal.xargs (added)
+++ vmkit/trunk/tests/minimal.xargs Thu Apr 25 11:52:43 2013
@@ -0,0 +1,33 @@
+-Dorg.knopflerfish.framework.main.verbosity=0
+-Dorg.knopflerfish.gosg.jars=file:jars/
+-Forg.knopflerfish.framework.debug.errors=true
+-Forg.knopflerfish.framework.debug.packages=false
+-Forg.knopflerfish.framework.debug.classloader=false
+-Forg.osgi.framework.system.packages.extra=
+
+-Forg.knopflerfish.startlevel.use=true
+
+-init
+
+-install log/log_api-3.1.2.jar
+-install console/console_api-3.0.3.jar
+-istart cm/cm_api-3.0.4.jar
+-istart log/log-3.1.2.jar
+-istart console/console-3.0.3.jar
+-istart consoletty/consoletty-3.0.1.jar
+-istart frameworkcommands/frameworkcommands-3.1.0.jar
+-istart logcommands/logcommands-3.1.1.jar
+-istart useradmin/useradmin_api-3.0.2.jar
+
+-launch
+
+-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/j3mgr_1.0.0.jar
+
+-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.A_1.0.0.jar
+-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.C_1.0.0.jar
+-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.AImpl_1.0.0.jar
+-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.BImpl_1.0.0.jar
+-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.CImpl_1.0.0.jar
+-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.DImpl_1.0.0.jar
+
+-istart file:///home/koutheir/PhD/VMKit/vmkit_stale_ref/tests/plugins/ijvm.tests.Runner_1.0.0.jar
More information about the vmkit-commits
mailing list