Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
proton-j-0.17.0
-
None
Description
DeliveryImpl manages several doubly linked lists (of links, work and transportWork). However it does not function properly if removal is done out of order. It leaves object references in the next/previous pointers which on a large scale inhibit the system from garbage collecting these object, namely the DeliveryImpl object graph.
In practice this was discovered when message consumers delay settlement of messages until after a period of time elapses (i.e. some async work is done in another thread). This causes out of order settlement to occur, leaving object references. Eventually the JVM will run out of memory and the process will crash. The heap can be examined to discover a large number of settled DeliveryImpl(s) which are holding references to themselves.