In my earlier attempts at buffering filters, I would allocate a single block of memory within the filter's state and use that as fill-area in the same way that the old buff.c code managed its buffers (though simpler because it wasn't trying to do so many different things in one routine).
This requires that a setaside function take a storage area and max length as an argument, rather than a pool. ....Roy