You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by do...@apache.org on 2002/07/10 12:42:12 UTC

cvs commit: jakarta-avalon-cornerstone/src/java/org/apache/avalon/cornerstone/blocks/connection Connection.java

donaldp     2002/07/10 03:42:12

  Modified:    src/java/org/apache/avalon/cornerstone/blocks/connection
                        Connection.java
  Log:
  Potential fix for a threading bug. The problem occured when Thread1 [dispose() method] interrupted Thread2 [in run() method] and Thread2 managed to get to notifyAll() before Thread1 got to wait(). This could occur if Thread1 was interupted or Thread2 was already being "shutdown"  when Thread1 did the interrupt.
  
  Synchronization was added to the "shutdown" portion of thread 2 and the "interrupt" portion of Thread 1 to hopefully alleviate this problem.
  
  Reported By: harald-n@gmx.de
  
  Revision  Changes    Path
  1.10      +11 -11    jakarta-avalon-cornerstone/src/java/org/apache/avalon/cornerstone/blocks/connection/Connection.java
  
  Index: Connection.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/src/java/org/apache/avalon/cornerstone/blocks/connection/Connection.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- Connection.java	16 Mar 2002 00:18:33 -0000	1.9
  +++ Connection.java	10 Jul 2002 10:42:12 -0000	1.10
  @@ -142,16 +142,16 @@
       public void dispose()
           throws Exception
       {
  -        if( null != m_thread )
  +        synchronized( this )
           {
  -            m_thread.interrupt();
  -            m_thread = null;
  -            //Can not join as threads are part of pool
  -            //and will never finish
  -            //m_thread.join();
  -
  -            synchronized( this )
  +            if( null != m_thread )
               {
  +                m_thread.interrupt();
  +                m_thread = null;
  +                //Can not join as threads are part of pool
  +                //and will never finish
  +                //m_thread.join();
  +
                   wait( /*1000*/ );
               }
           }
  @@ -185,11 +185,11 @@
                   getLogger().warn( "Error shutting down connection", ioe );
               }
   
  -            m_thread = null;
  -            m_runners.remove( this );
  -
               synchronized( this )
               {
  +                m_thread = null;
  +                m_runners.remove( this );
  +
                   notifyAll();
               }
           }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>