Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 132826 Details for
Bug 212262
JRE can hang with circular dependencies
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
work in progress
212262ParallelClassLoader.txt (text/plain), 6.04 KB, created by
Thomas Watson
on 2009-04-22 15:10:07 EDT
(
hide
)
Description:
work in progress
Filename:
MIME Type:
Creator:
Thomas Watson
Created:
2009-04-22 15:10:07 EDT
Size:
6.04 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.osgi >Index: defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.java,v >retrieving revision 1.9 >diff -u -r1.9 DefaultClassLoader.java >--- defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.java 6 Mar 2009 21:19:09 -0000 1.9 >+++ defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader.java 22 Apr 2009 18:46:53 -0000 >@@ -12,6 +12,7 @@ > package org.eclipse.osgi.internal.baseadaptor; > > import java.io.IOException; >+import java.lang.reflect.Method; > import java.net.MalformedURLException; > import java.net.URL; > import java.security.*; >@@ -34,19 +35,34 @@ > * @see BaseClassLoader > * @see ClasspathManager > */ >-public class DefaultClassLoader extends ClassLoader implements BaseClassLoader { >+public class DefaultClassLoader extends ClassLoader implements ParallelClassLoader { > /** > * A PermissionCollection for AllPermissions; shared across all ProtectionDomains when security is disabled > */ > protected static final PermissionCollection ALLPERMISSIONS; > private final static String CLASS_CERTIFICATE_SUPPORT = "osgi.support.class.certificate"; //$NON-NLS-1$ >+ private final static String CLASS_LOADER_TYPE = "osgi.classloader.type"; //$NON-NLS-1$ >+ private final static String CLASS_LOADER_TYPE_PARALLEL = "parallel"; //$NON-NLS-1$ > private static final boolean CLASS_CERTIFICATE; >+ private static final boolean PARALLEL_CAPABLE; > static { > CLASS_CERTIFICATE = Boolean.valueOf(FrameworkProperties.getProperty(CLASS_CERTIFICATE_SUPPORT, "true")).booleanValue(); //$NON-NLS-1$ > AllPermission allPerm = new AllPermission(); > ALLPERMISSIONS = allPerm.newPermissionCollection(); > if (ALLPERMISSIONS != null) > ALLPERMISSIONS.add(allPerm); >+ boolean typeParallel = CLASS_LOADER_TYPE_PARALLEL.equals(FrameworkProperties.getProperty(CLASS_LOADER_TYPE)); >+ boolean parallelCapable = false; >+ try { >+ if (typeParallel) { >+ Method parallelCapableMetod = ClassLoader.class.getMethod("registerAsParallelCapable", null); //$NON-NLS-1$ >+ parallelCapable = ((Boolean) parallelCapableMetod.invoke(null, null)).booleanValue(); >+ } >+ } catch (Throwable e) { >+ // must do everything to avoid failing in clinit >+ parallelCapable = false; >+ } >+ PARALLEL_CAPABLE = parallelCapable; > } > > protected ClassLoaderDelegate delegate; >@@ -250,4 +266,8 @@ > public Bundle getBundle() { > return manager.getBaseData().getBundle(); > } >+ >+ public boolean isParrallelCapable() { >+ return PARALLEL_CAPABLE; >+ } > } >Index: supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java,v >retrieving revision 1.9 >diff -u -r1.9 StorageManager.java >--- supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java 20 Nov 2008 15:08:42 -0000 1.9 >+++ supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java 22 Apr 2009 18:46:53 -0000 >@@ -554,6 +554,9 @@ > if (error) > fileStream.abort(); > } >+ >+ if (openCleanup) >+ cleanup(); > tableStamp = ReliableFile.lastModifiedVersion(tableFile); > } > >Index: defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ClasspathManager.java >=================================================================== >RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ClasspathManager.java,v >retrieving revision 1.16 >diff -u -r1.16 ClasspathManager.java >--- defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ClasspathManager.java 6 Mar 2009 21:19:09 -0000 1.16 >+++ defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ClasspathManager.java 22 Apr 2009 18:46:52 -0000 >@@ -56,6 +56,7 @@ > // a collection of String[2], each element is {"libname", "libpath"} > private Collection loadedLibraries = null; > private HashMap classNameLocks = new HashMap(5); >+ private final boolean isParallelClassLoader; > > /** > * Constructs a classpath manager for the given host base data, classpath and base class loader >@@ -67,6 +68,7 @@ > this.data = data; > this.classpath = classpath; > this.classloader = classloader; >+ isParallelClassLoader = (classloader instanceof ParallelClassLoader) ? ((ParallelClassLoader) classloader).isParrallelCapable() : false; > } > > /** >@@ -437,7 +439,7 @@ > try { > for (int i = 0; i < hooks.length; i++) > hooks[i].preFindLocalClass(classname, this); >- if (LOCK_CLASSNAME) >+ if (LOCK_CLASSNAME || isParallelClassLoader) > result = findLocalClass_LockClassName(classname, hooks); > else > result = findLocalClass_LockClassLoader(classname, hooks); >Index: defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ParallelClassLoader.java >=================================================================== >RCS file: defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ParallelClassLoader.java >diff -N defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ParallelClassLoader.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ defaultAdaptor/src/org/eclipse/osgi/baseadaptor/loader/ParallelClassLoader.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,16 @@ >+/******************************************************************************* >+ * Copyright (c) 2009 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+ >+package org.eclipse.osgi.baseadaptor.loader; >+ >+public interface ParallelClassLoader extends BaseClassLoader { >+ boolean isParrallelCapable(); >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 212262
:
84728
|
84729
|
111365
|
123096
|
132826
|
132840
|
132976
|
133002