Haviv wrote:
Hi,
The ProcessEventsRunnable  also doesnt process event in sequence:
because the processEvent method call is outside the synch part :


       public void run()
        {
            while( true )
            {
                Event event;

                synchronized( buffer.eventQueue )
                {
                    if( buffer.eventQueue.isEmpty() )
                    {
                        buffer.processingCompleted = true;
                        break;
                    }

                    event = ( Event ) buffer.eventQueue.remove( 0 );
                }

                processEvent( event.getNextFilter(), buffer.session,
event.getType(), event.getData() );
            }

            if ( logger.isDebugEnabled() ) {
                logger.debug( "Exiting since queue is empty for " +
buffer.session.getRemoteAddress() );
            }
        }


Hi Haviv.

Please look inside synchronized block in ExcutorFilter fireEvent method and please analyse for what is "if( buf.processingCompleted )" instruction.

Also look at ProcessEventsRunnable.run() and ExcutorFilter.fireEvent() methods and analyse where buf.processingCompleted is changed and why.

Regards, Marcin

Reply via email to