Details
Description
A reference to AMQChannel object is not removed from SimpleAMQQueue#_blockedChannels map on closing connections with producer side flow control when flow is blocked.
This can result in memory leaks. Also, the subsequent invocations of operations like SimpleAMQQueue#delete can results in failures similar to the one below
2012-03-07 19:22:37,132 ERROR [IoReceiver - /169.82.100.202:51439] (LocalTransaction.java:265) - Failed to commit transaction org.apache.qpid.transport.SenderClosedException: sender is closed at org.apache.qpid.transport.network.io.IoSender.send(IoSender.java:114) at org.apache.qpid.transport.network.io.IoSender.send(IoSender.java:40) at org.apache.qpid.server.protocol.AMQProtocolEngine.writeFrame(AMQProtocolEngine.java:558) at org.apache.qpid.server.AMQChannel.flow(AMQChannel.java:1403) at org.apache.qpid.server.AMQChannel.unblock(AMQChannel.java:1384) at org.apache.qpid.server.queue.SimpleAMQQueue.checkCapacity(SimpleAMQQueue.java:1696) at org.apache.qpid.server.queue.SimpleAMQQueue.dequeue(SimpleAMQQueue.java:897) at org.apache.qpid.server.queue.QueueEntryImpl.dequeue(QueueEntryImpl.java:376) at org.apache.qpid.server.queue.QueueEntryImpl.discard(QueueEntryImpl.java:407) at org.apache.qpid.server.queue.SimpleAMQQueue$13.postCommit(SimpleAMQQueue.java:1608) at org.apache.qpid.server.txn.LocalTransaction.commit(LocalTransaction.java:260) at org.apache.qpid.server.txn.LocalTransaction.commit(LocalTransaction.java:241) at org.apache.qpid.server.queue.SimpleAMQQueue.delete(SimpleAMQQueue.java:1619) at org.apache.qpid.server.handler.QueueDeleteHandler.methodReceived(QueueDeleteHandler.java:114) at org.apache.qpid.server.handler.ServerMethodDispatcherImpl.dispatchQueueDelete(ServerMethodDispatcherImpl.java:518) at org.apache.qpid.framing.amqp_0_9.QueueDeleteBodyImpl.execute(QueueDeleteBodyImpl.java:153) at org.apache.qpid.server.state.AMQStateManager.methodReceived(AMQStateManager.java:109) at org.apache.qpid.server.protocol.AMQProtocolEngine.methodFrameReceived(AMQProtocolEngine.java:454) at org.apache.qpid.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:97) at org.apache.qpid.server.protocol.AMQProtocolEngine.frameReceived(AMQProtocolEngine.java:343) at org.apache.qpid.server.protocol.AMQProtocolEngine.dataBlockReceived(AMQProtocolEngine.java:292) at org.apache.qpid.server.protocol.AMQProtocolEngine.received(AMQProtocolEngine.java:255) at org.apache.qpid.server.protocol.AMQProtocolEngine.received(AMQProtocolEngine.java:86) at org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:118) at org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:37) at org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:152) at java.lang.Thread.run(Thread.java:662) 2012-03-07 19:22:37,135 ERROR [IoReceiver - /169.82.100.202:51439] (AMQProtocolEngine.java:520) - Unexpected exception while processing frame. Closing connection. java.lang.RuntimeException: Failed to commit transaction at org.apache.qpid.server.txn.LocalTransaction.commit(LocalTransaction.java:271) at org.apache.qpid.server.txn.LocalTransaction.commit(LocalTransaction.java:241) at org.apache.qpid.server.queue.SimpleAMQQueue.delete(SimpleAMQQueue.java:1619) at org.apache.qpid.server.handler.QueueDeleteHandler.methodReceived(QueueDeleteHandler.java:114) at org.apache.qpid.server.handler.ServerMethodDispatcherImpl.dispatchQueueDelete(ServerMethodDispatcherImpl.java:518) at org.apache.qpid.framing.amqp_0_9.QueueDeleteBodyImpl.execute(QueueDeleteBodyImpl.java:153) at org.apache.qpid.server.state.AMQStateManager.methodReceived(AMQStateManager.java:109) at org.apache.qpid.server.protocol.AMQProtocolEngine.methodFrameReceived(AMQProtocolEngine.java:454) at org.apache.qpid.framing.AMQMethodBodyImpl.handle(AMQMethodBodyImpl.java:97) at org.apache.qpid.server.protocol.AMQProtocolEngine.frameReceived(AMQProtocolEngine.java:343) at org.apache.qpid.server.protocol.AMQProtocolEngine.dataBlockReceived(AMQProtocolEngine.java:292) at org.apache.qpid.server.protocol.AMQProtocolEngine.received(AMQProtocolEngine.java:255) at org.apache.qpid.server.protocol.AMQProtocolEngine.received(AMQProtocolEngine.java:86) at org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:118) at org.apache.qpid.server.protocol.MultiVersionProtocolEngine.received(MultiVersionProtocolEngine.java:37) at org.apache.qpid.transport.network.io.IoReceiver.run(IoReceiver.java:152) at java.lang.Thread.run(Thread.java:662) Caused by: org.apache.qpid.transport.SenderClosedException: sender is closed