Author: markt
Date: Fri Jul 27 23:12:55 2012
New Revision: 1366567
URL: http://svn.apache.org/viewvc?rev=1366567&view=rev
Log:
Fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=53529
Improve the handling of InterruptedException
- Provide a specific message if thread was interrupted rather than the wait
timing out
- Remove unnecessary code
- Remove unnecessary attemps to clear the interrupt flag
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/group/GroupChannel.java
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/TcpPingInterceptor.java
tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
tomcat/trunk/java/org/apache/juli/AsyncFileHandler.java
tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java
tomcat/trunk/java/org/apache/tomcat/util/threads/ThreadPoolExecutor.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/tribes/group/GroupChannel.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/GroupChannel.java?rev=1366567&r1=1366566&r2=1366567&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/group/GroupChannel.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/group/GroupChannel.java Fri
Jul 27 23:12:55 2012
@@ -689,7 +689,9 @@ public class GroupChannel extends Channe
Thread.sleep(sleepTime);
channel.heartbeat();
} catch ( InterruptedException x ) {
- interrupted();
+ // Ignore. Probably triggered by a call to stopHeartbeat().
+ // In the highly unlikely event it was a different trigger,
+ // simply ignore it and continue.
} catch ( Exception x ) {
log.error("Unable to send heartbeat through Tribes
interceptor stack. Will try to sleep again.",x);
}//catch
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java?rev=1366567&r1=1366566&r2=1366567&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
Fri Jul 27 23:12:55 2012
@@ -225,19 +225,22 @@ public class NonBlockingCoordinator exte
coordMsgReceived.set(false);
fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_WAIT_FOR_MSG,this,"Election, waiting
for request"));
electionMutex.wait(waitForCoordMsgTimeout);
- }catch ( InterruptedException x ) {
- Thread.interrupted();
+ } catch (InterruptedException x) {
+ Thread.currentThread().interrupt();
}
- if ( suggestedviewId == null && (!coordMsgReceived.get())) {
- //no message arrived, send the coord msg
-// fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_WAIT_FOR_MSG,this,"Election, waiting
timed out."));
-// startElection(true);
- fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_ELECT_ABANDONED,this,"Election
abandoned, waiting timed out."));
+ String msg;
+ if (suggestedviewId == null && !coordMsgReceived.get()) {
+ if (Thread.interrupted()) {
+ msg = "Election abandoned, waiting interrupted.";
+ } else {
+ msg = "Election abandoned, waiting timed out.";
+ }
} else {
- fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_ELECT_ABANDONED,this,"Election
abandoned, received a message"));
+ msg = "Election abandoned, received a message";
}
- }//end if
-
+ fireInterceptorEvent(new CoordinationEvent(
+ CoordinationEvent.EVT_ELECT_ABANDONED, this, msg));
+ }
}
}
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/TcpPingInterceptor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/TcpPingInterceptor.java?rev=1366567&r1=1366566&r2=1366567&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/TcpPingInterceptor.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/TcpPingInterceptor.java
Fri Jul 27 23:12:55 2012
@@ -172,7 +172,9 @@ public class TcpPingInterceptor extends
sleep(interval);
sendPing();
}catch ( InterruptedException ix ) {
- interrupted();
+ // Ignore. Probably triggered by a call to stop().
+ // In the highly unlikely event it was a different trigger,
+ // simply ignore it and continue.
}catch ( Exception x ) {
log.warn("Unable to send ping from TCP ping thread.",x);
}
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java?rev=1366567&r1=1366566&r2=1366567&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
Fri Jul 27 23:12:55 2012
@@ -537,16 +537,13 @@ public class McastServiceImpl
if ( log.isDebugEnabled() )
log.debug("Invalid member mcast package.",ax);
} catch ( Exception x ) {
- if (x instanceof InterruptedException) interrupted();
- else {
- if (errorCounter==0 && doRunReceiver) log.warn("Error
receiving mcast package. Sleeping 500ms",x);
- else if (log.isDebugEnabled()) log.debug("Error
receiving mcast package"+(doRunReceiver?". Sleeping 500ms":"."),x);
- if (doRunReceiver) {
- try { Thread.sleep(500); } catch ( Exception
ignore ){}
- if ( (++errorCounter)>=recoveryCounter ) {
- errorCounter=0;
- RecoveryThread.recover(McastServiceImpl.this);
- }
+ if (errorCounter==0 && doRunReceiver) log.warn("Error
receiving mcast package. Sleeping 500ms",x);
+ else if (log.isDebugEnabled()) log.debug("Error receiving
mcast package"+(doRunReceiver?". Sleeping 500ms":"."),x);
+ if (doRunReceiver) {
+ try { Thread.sleep(500); } catch ( Exception ignore ){}
+ if ( (++errorCounter)>=recoveryCounter ) {
+ errorCounter=0;
+ RecoveryThread.recover(McastServiceImpl.this);
}
}
}
Modified: tomcat/trunk/java/org/apache/juli/AsyncFileHandler.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/juli/AsyncFileHandler.java?rev=1366567&r1=1366566&r2=1366567&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/juli/AsyncFileHandler.java (original)
+++ tomcat/trunk/java/org/apache/juli/AsyncFileHandler.java Fri Jul 27 23:12:55
2012
@@ -123,9 +123,8 @@ public class AsyncFileHandler extends Fi
}//switch
}//while
}catch (InterruptedException x) {
- //allow thread to be interrupted and back out of the publish
operation
- //after this we clear the flag
- Thread.interrupted();
+ // Allow thread to be interrupted and back out of the publish
+ // operation. No further action required.
}
}
@@ -147,12 +146,12 @@ public class AsyncFileHandler extends Fi
try {
LogEntry entry = queue.poll(LOGGER_SLEEP_TIME,
TimeUnit.MILLISECONDS);
if (entry!=null) entry.flush();
- }catch (InterruptedException x) {
- Thread.interrupted();
- }catch (Exception x) {
+ } catch (InterruptedException x) {
+ // Ignore the attempt to interrupt the thread.
+ } catch (Exception x) {
x.printStackTrace();
}
- }//while
+ }
}
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1366567&r1=1366566&r2=1366567&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Fri Jul 27
23:12:55 2012
@@ -639,8 +639,7 @@ public class AprEndpoint extends Abstrac
try {
Thread.sleep(50);
} catch (InterruptedException e) {
- // Ignore and clean the interrupt flag
- Thread.interrupted();
+ // Ignore
}
waitLeft -= 50;
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java?rev=1366567&r1=1366566&r2=1366567&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java Fri
Jul 27 23:12:55 2012
@@ -108,8 +108,8 @@ public class NioBlockingSelector {
} else {
att.awaitWriteLatch(writeTimeout,TimeUnit.MILLISECONDS);
}
- }catch (InterruptedException ignore) {
- Thread.interrupted();
+ } catch (InterruptedException ignore) {
+ // Ignore
}
if ( att.getWriteLatch()!=null &&
att.getWriteLatch().getCount()> 0) {
//we got interrupted, but we haven't received notification
from the poller.
@@ -173,8 +173,8 @@ public class NioBlockingSelector {
} else {
att.awaitReadLatch(readTimeout, TimeUnit.MILLISECONDS);
}
- }catch (InterruptedException ignore) {
- Thread.interrupted();
+ } catch (InterruptedException ignore) {
+ // Ignore
}
if ( att.getReadLatch()!=null &&
att.getReadLatch().getCount()> 0) {
//we got interrupted, but we haven't received notification
from the poller.
Modified:
tomcat/trunk/java/org/apache/tomcat/util/threads/ThreadPoolExecutor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/threads/ThreadPoolExecutor.java?rev=1366567&r1=1366566&r2=1366567&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/threads/ThreadPoolExecutor.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/threads/ThreadPoolExecutor.java
Fri Jul 27 23:12:55 2012
@@ -184,7 +184,6 @@ public class ThreadPoolExecutor extends
}
} catch (InterruptedException x) {
submittedCount.decrementAndGet();
- Thread.interrupted();
throw new RejectedExecutionException(x);
}
} else {
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1366567&r1=1366566&r2=1366567&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Jul 27 23:12:55 2012
@@ -120,6 +120,10 @@
The correct names are <code>jasper</code> and <code>jkupdate</code>.
(kkolinko)
</update>
+ <fix>
+ <bug>53529</bug>: Clean-up the handling of
+ <code>InterruptedException</code> throughout the code base. (markt)
+ </fix>
</changelog>
</subsection>
</section>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]