You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by le...@apache.org on 2002/03/06 09:20:30 UTC

cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/event DefaultQueue.java

leosutic    02/03/06 00:20:30

  Modified:    src/scratchpad/org/apache/avalon/excalibur/event
                        DefaultQueue.java
  Log:
  Bugfixes related to the aquisition and release of the mutex.
  
  Revision  Changes    Path
  1.9       +91 -67    jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/event/DefaultQueue.java
  
  Index: DefaultQueue.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/event/DefaultQueue.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- DefaultQueue.java	4 Feb 2002 18:21:50 -0000	1.8
  +++ DefaultQueue.java	6 Mar 2002 08:20:30 -0000	1.9
  @@ -67,21 +67,24 @@
           try
           {
               m_mutex.acquire();
  +            try
  +            {
  +
  +                if ( maxSize() > 0 && elements.length + m_reserve + size() > maxSize() )
  +                {
  +                    throw new SinkFullException("Not enough room to enqueue these elements.");
  +                }
   
  -            if ( maxSize() > 0 && elements.length + m_reserve + size() > maxSize() )
  +                enqueue = new DefaultPreparedEnqueue( this, elements );
  +            }
  +            finally
               {
  -                throw new SinkFullException("Not enough room to enqueue these elements.");
  +                m_mutex.release();
               }
  -
  -            enqueue = new DefaultPreparedEnqueue( this, elements );
           }
           catch ( InterruptedException ie )
           {
           }
  -        finally
  -        {
  -            m_mutex.release();
  -        }
   
           return enqueue;
       }
  @@ -93,22 +96,25 @@
           try
           {
               m_mutex.acquire();
  +            try
  +            {
   
  -            if (  maxSize() > 0 && 1 + m_reserve + size() > maxSize() )
  +                if (  maxSize() > 0 && 1 + m_reserve + size() > maxSize() )
  +                {
  +                    return false;
  +                }
  +
  +                m_elements.add( element );
  +                success = true;
  +            }
  +            finally
               {
  -                return false;
  +                m_mutex.release();
               }
  -
  -            m_elements.add( element );
  -            success = true;
           }
           catch ( InterruptedException ie )
           {
           }
  -        finally
  -        {
  -            m_mutex.release();
  -        }
   
           return success;
       }
  @@ -121,23 +127,26 @@
           try
           {
               m_mutex.acquire();
  -            if (  maxSize() > 0 && elements.length + m_reserve + size() > maxSize() )
  +            try
               {
  -                throw new SinkFullException("Not enough room to enqueue these elements.");
  -            }
  +                if (  maxSize() > 0 && elements.length + m_reserve + size() > maxSize() )
  +                {
  +                    throw new SinkFullException("Not enough room to enqueue these elements.");
  +                }
   
  -            for ( int i = 0; i < len; i++ )
  +                for ( int i = 0; i < len; i++ )
  +                {
  +                    m_elements.add( elements[i] );
  +                }
  +            }
  +            finally
               {
  -                m_elements.add( elements[i] );
  +                m_mutex.release();
               }
           }
           catch ( InterruptedException ie )
           {
           }
  -        finally
  -        {
  -            m_mutex.release();
  -        }
       }
   
       public void enqueue( final QueueElement element )
  @@ -146,20 +155,23 @@
           try
           {
               m_mutex.acquire();
  -            if (  maxSize() > 0 && 1 + m_reserve + size() > maxSize() )
  +            try
               {
  -                throw new SinkFullException("Not enough room to enqueue these elements.");
  -            }
  +                if (  maxSize() > 0 && 1 + m_reserve + size() > maxSize() )
  +                {
  +                    throw new SinkFullException("Not enough room to enqueue these elements.");
  +                }
   
  -            m_elements.add( element );
  +                m_elements.add( element );
  +            }
  +            finally
  +            {
  +                m_mutex.release();
  +            }
           }
           catch ( InterruptedException ie )
           {
           }
  -        finally
  -        {
  -            m_mutex.release();
  -        }
       }
   
       public QueueElement[] dequeue( final int numElements )
  @@ -175,27 +187,31 @@
   
           try
           {
  -            m_mutex.attempt( m_timeout );
  -
  -            if ( size() < numElements )
  -            {
  -                arraySize = size();
  -            }
  -
  -            elements = new QueueElement[ arraySize ];
  -
  -            for ( int i = 0; i < arraySize; i++ )
  +            if (m_mutex.attempt( m_timeout )) 
               {
  -                elements[i] = (QueueElement) m_elements.remove();
  +                try
  +                {
  +                    if ( size() < numElements )
  +                    {
  +                        arraySize = size();
  +                    }
  +
  +                    elements = new QueueElement[ arraySize ];
  +
  +                    for ( int i = 0; i < arraySize; i++ )
  +                    {
  +                        elements[i] = (QueueElement) m_elements.remove();
  +                    }
  +                }
  +                finally
  +                {
  +                    m_mutex.release();
  +                }
               }
           }
           catch ( InterruptedException ie )
           {
           }
  -        finally
  -        {
  -            m_mutex.release();
  -        }
   
           return elements;
       }
  @@ -206,22 +222,26 @@
   
           try
           {
  -            m_mutex.attempt( m_timeout );
  -
  -            elements = new QueueElement[ size() ];
  -
  -            for ( int i = 0; i < elements.length; i++ )
  +            if (m_mutex.attempt( m_timeout )) 
               {
  -                elements[i] = (QueueElement) m_elements.remove();
  +                try
  +                {
  +                    elements = new QueueElement[ size() ];
  +
  +                    for ( int i = 0; i < elements.length; i++ )
  +                    {
  +                        elements[i] = (QueueElement) m_elements.remove();
  +                    }
  +                }
  +                finally
  +                {
  +                    m_mutex.release();
  +                }
               }
           }
           catch ( InterruptedException ie )
           {
           }
  -        finally
  -        {
  -            m_mutex.release();
  -        }
   
           return elements;
       }
  @@ -232,19 +252,23 @@
   
           try
           {
  -            m_mutex.attempt( m_timeout );
  -
  -            if ( size() > 0 )
  +            if (m_mutex.attempt( m_timeout )) 
               {
  -                element = (QueueElement) m_elements.remove();
  +                try
  +                {
  +                    if ( size() > 0 )
  +                    {
  +                        element = (QueueElement) m_elements.remove();
  +                    }
  +                }
  +                finally
  +                {
  +                    m_mutex.release();
  +                }
               }
           }
           catch ( InterruptedException ie )
           {
  -        }
  -        finally
  -        {
  -            m_mutex.release();
           }
   
           return element;
  
  
  

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