Quickly broken client connections lead to memory leaks
------------------------------------------------------
Key: AMQ-932
URL: https://issues.apache.org/activemq/browse/AMQ-932
Project: ActiveMQ
Issue Type: Bug
Components: Broker
Affects Versions: 4.0.2
Reporter: John Heitmann
Attachments: 73.diff
Connections to the openwire port that are pathologically broken (for example
any http request) or that die in some other way extremely quickly will lead to
memory losses of aout 64Kb each time. This happens because many services are
stop()ed directly in the middle of start(), and then never stopped for real, or
stopped again but on an object tree with an inconsistent state. This is usually
also accompanied by the JMX message:
WARN ManagedTransportConnection - Failed to unregister mbean:
org.apache.activemq:BrokerName=localhost,Type=Connection,ConnectorName=default,Connection=25
But that is a cosmetic symptom and not critical (and this has otherwise nothing
to do with JMX).
My patch is a band-aid that is functional but I'm not very happy with it. The
patch changes some service logic so that if stop is called in the middle of
start, the stop is instead queued and called at the end of start. There will
still be multiple stops, and you'll still see the cosmetic JMX error from the
second ineffectual stop, but the first stop cleans up correctly so there are no
leaks.
I think there's probably a better solution, but it was tough to see what. I'd
appreciate better ideas. Possibly something involving moving the dangerous
operations (wire format negotiation etc) out of start?
I am working on a unit test, but I can't promise I will have something to
submit. I'm having to play JVM games to detect the problem in a unit test and
that might not fly for general purpose use.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira