Daffodil is currently used in a long running process (via a NiFi
processor). After running it for a while, it looks like there is a
memory leak in delimiter scanning, but since I'm not too familiar with
this particular code I wanted to run it by dev before making a fix.

We have a pool of Registers that contain state information for delimiter
scanning (e.g. result string, matched delimiter string, characters
read). These fields are usually reset after being retrieved from the
pool by a call to reset().

One of these fields is "charsReadUntilDelim", but it is currently not
reset like other StringBuilders in the Register.  It is allocated once
when a Register is created and is only ever appended to. Since it is
never reset, it essentially grows forever one character at a time. It
does not appear to ever be used aside from append()s.

Does anyone know the purpose of this charsReadUntilDelim? It does not
appear to be used anymore. Perhaps it was used for debugging at some
point but is no longer necessary? The easy fix for the memory leak it to
just reset() it, but if it's not used anywhere we might as well just
remove it.

Reply via email to