You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2009/02/04 22:38:20 UTC
svn commit: r740901 - in
/felix/trunk/framework/src/main/java/org/apache/felix/framework: Felix.java
PackageAdminImpl.java StartLevelImpl.java util/EventDispatcher.java
Author: rickhall
Date: Wed Feb 4 21:38:20 2009
New Revision: 740901
URL: http://svn.apache.org/viewvc?rev=740901&view=rev
Log:
Made sure thread run() methods are reasonably robust in the face of
exceptions; added some comments to explain the approach. (FELIX-681)
Modified:
felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/PackageAdminImpl.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/StartLevelImpl.java
felix/trunk/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java?rev=740901&r1=740900&r2=740901&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/Felix.java Wed Feb 4 21:38:20 2009
@@ -3699,7 +3699,7 @@
{
stopBundle(m_bundle, false);
}
- catch (BundleException ex)
+ catch (Throwable ex)
{
fireFrameworkEvent(FrameworkEvent.ERROR, m_bundle, ex);
}
@@ -3728,7 +3728,7 @@
refreshBundle(m_bundle);
}
}
- catch (Exception ex)
+ catch (Throwable ex)
{
fireFrameworkEvent(FrameworkEvent.ERROR, m_bundle, ex);
}
@@ -3742,7 +3742,7 @@
{
startBundle(m_bundle, false);
}
- catch (BundleException ex)
+ catch (Throwable ex)
{
fireFrameworkEvent(FrameworkEvent.ERROR, m_bundle, ex);
}
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/PackageAdminImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/PackageAdminImpl.java?rev=740901&r1=740900&r2=740901&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/PackageAdminImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/PackageAdminImpl.java Wed Feb 4 21:38:20 2009
@@ -331,6 +331,9 @@
}
// Perform refresh.
+ // NOTE: We don't catch any exceptions here, because
+ // the invoked method shields us from exceptions by
+ // catching Throwables when its invokes callbacks.
m_felix.refreshPackages(bundles);
// Remove the first request since it is now completed.
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/StartLevelImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/StartLevelImpl.java?rev=740901&r1=740900&r2=740901&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/StartLevelImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/StartLevelImpl.java Wed Feb 4 21:38:20 2009
@@ -36,14 +36,12 @@
private static final int BUNDLE_IDX = 0;
private static final int STARTLEVEL_IDX = 1;
- private Logger m_logger = null;
- private Felix m_felix = null;
+ private final Felix m_felix;
private final List m_requestList = new ArrayList();
private Thread m_thread = null;
- public StartLevelImpl(Logger logger, Felix felix)
+ public StartLevelImpl(Felix felix)
{
- m_logger = logger;
m_felix = felix;
// Start a thread to perform asynchronous package refreshes.
m_thread = new Thread(this, "FelixStartLevel");
@@ -135,7 +133,7 @@
catch (InterruptedException ex)
{
// Log it and ignore since it won't cause much of an issue.
- m_logger.log(
+ m_felix.getLogger().log(
Logger.LOG_WARNING,
"Wait for start level change during shutdown interrupted.",
ex);
@@ -256,6 +254,9 @@
// is to set the framework start level. If the request is
// an Object array, then the request is to set the start
// level for a bundle.
+ // NOTE: We don't catch any exceptions here, because
+ // the invoked methods shield us from exceptions by
+ // catching Throwables when they invoke callbacks.
if (request instanceof Integer)
{
// Set the new framework start level.
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java?rev=740901&r1=740900&r2=740901&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/util/EventDispatcher.java Wed Feb 4 21:38:20 2009
@@ -868,6 +868,9 @@
// Deliver event outside of synchronized block
// so that we don't block other requests from being
// queued during event processing.
+ // NOTE: We don't catch any exceptions here, because
+ // the invoked method shields us from exceptions by
+ // catching Throwables when it invokes callbacks.
fireEventImmediately(req.m_logger, req.m_type, req.m_listeners, req.m_event);
// Put dispatch request in cache.
@@ -893,4 +896,4 @@
public Object[] m_listeners = null;
public EventObject m_event = null;
}
-}
+}
\ No newline at end of file