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]

Reply via email to