You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2009/09/09 14:10:53 UTC
svn commit: r812916 -
/felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java
Author: pauls
Date: Wed Sep 9 12:10:52 2009
New Revision: 812916
URL: http://svn.apache.org/viewvc?rev=812916&view=rev
Log:
Fix potential deadlock when framework is shutdown and a url is created on the outside at the same time (FELIX-1565).
Modified:
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java?rev=812916&r1=812915&r2=812916&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java Wed Sep 9 12:10:52 2009
@@ -521,6 +521,7 @@
**/
public static void unregisterFrameworkInstance(Object framework)
{
+ boolean unregister = false;
synchronized (m_frameworks)
{
m_counter--;
@@ -528,24 +529,28 @@
{
if (m_frameworks.isEmpty())
{
- try
- {
- m_secureAction.invoke(m_secureAction.getDeclaredMethod(
- m_rootURLHandlers.getClass(),
- "unregisterFrameworkListsForContextSearch",
- new Class[]{ ClassLoader.class}),
- m_rootURLHandlers,
- new Object[] {URLHANDLERS_CLASS.getClassLoader()});
- }
- catch (Exception e)
- {
- // TODO: this should not happen
- e.printStackTrace();
- }
+ unregister = true;
m_handler = null;
}
}
}
+ if (unregister)
+ {
+ try
+ {
+ m_secureAction.invoke(m_secureAction.getDeclaredMethod(
+ m_rootURLHandlers.getClass(),
+ "unregisterFrameworkListsForContextSearch",
+ new Class[]{ ClassLoader.class}),
+ m_rootURLHandlers,
+ new Object[] {URLHANDLERS_CLASS.getClassLoader()});
+ }
+ catch (Exception e)
+ {
+ // TODO: this should not happen
+ e.printStackTrace();
+ }
+ }
}
/**