Property trees based on atomic names, attributes and values (all property tree until the refactoring, see:
HPCC-17192), use link counted entries to minimise the memory footprint.
If an attribute is removed from a property tree - e.g. IPropertyTree::removeProp("@someattr")
.. then this attributes link count was not being reduced and therefore would never be removed from the global atom table.
NB: attribute names tend to reused so they are may not be a big issue, but attributes values tend to be more varied.
This is likely to have had an impact on the Dali memory footprint, which has a very large number of property tree nodes which are constantly being updated.