AMQStateManager issue during connection close
---------------------------------------------

                 Key: QPID-378
                 URL: https://issues.apache.org/jira/browse/QPID-378
             Project: Qpid
          Issue Type: Bug
          Components: Dot Net Client
         Environment: .NET 2.0
            Reporter: Tomas Restrepo


Occasionally, while testing the .NET client against the Java Broker, an error 
will be raised during connection shutdown:

failed: Qpid.Messaging.QpidException : Error closing connection: 
Qpid.AMQException: Error: System.InvalidOperationException: Collection was 
modified; enumeration operation may not execute.
   at System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext()
   at Qpid.Client.State.AMQStateManager.ChangeState(AMQState newState) in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\State\AMQStateManager.cs:line 131
   at 
Qpid.Client.Handler.ConnectionOpenOkMethodHandler.MethodReceived(AMQStateManager
 stateManager, AMQMethodEvent evt) in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\Handler\ConnectionOpenOkMethodHandler.cs:line
 30
   at Qpid.Client.State.AMQStateManager.MethodReceived(AMQMethodEvent evt) in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\State\AMQStateManager.cs:line 152
   at Qpid.Client.Protocol.AMQProtocolListener.OnMessage(IDataBlock message) in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\Protocol\AMQProtocolListener.cs:line
 111 ---> System.InvalidOperationException: Collection was modified; 
enumeration operation may not execute.
   at System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext()
   at Qpid.Client.State.AMQStateManager.ChangeState(AMQState newState) in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\State\AMQStateManager.cs:line 131
   at 
Qpid.Client.Handler.ConnectionOpenOkMethodHandler.MethodReceived(AMQStateManager
 stateManager, AMQMethodEvent evt) in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\Handler\ConnectionOpenOkMethodHandler.cs:line
 30
   at Qpid.Client.State.AMQStateManager.MethodReceived(AMQMethodEvent evt) in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\State\AMQStateManager.cs:line 152
   at Qpid.Client.Protocol.AMQProtocolListener.OnMessage(IDataBlock message) in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\Protocol\AMQProtocolListener.cs:line
 111
   --- End of inner exception stack trace ---
   at Qpid.Client.State.StateWaiter.WaituntilStateHasChanged() in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\State\StateWaiter.cs:line 94
   at Qpid.Client.State.AMQStateManager.AttainState(AMQState s) in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\State\AMQStateManager.cs:line 220
   at Qpid.Client.AMQConnection.CloseConnection() in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\AMQConnection.cs:line 263
   at Qpid.Client.AMQConnection.Close() in 
E:\Opensource\qpid\dotnet\Qpid.Client\Client\AMQConnection.cs:line 242
        E:\Opensource\qpid\dotnet\Qpid.Client\Client\AMQConnection.cs(246,0): 
at Qpid.Client.AMQConnection.Close()
        E:\Opensource\qpid\dotnet\Qpid.Client\Client\AMQConnection.cs(428,0): 
at Qpid.Client.AMQConnection.Dispose()

The code that's causing the exception is this:
            foreach (IStateListener l in _stateListeners)
            {
                l.StateChanged(oldState, newState);
            }

I think it might be a raise condition of sorts or likely that the state manager 
is not thread safe and is something is modifying the list of state listeners 
during shutdown.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to