I found out that when there is a memory leak during a long-lived tx using c3p0, it is most likely created by not closing your resultsets and statements appropriately.
This happens because there are several places where the pool keeps references to resultsets, statements and connections (to be able to clean the house at the end), and these references are freed only when you close each resource...
2009-10-06 20:29:42 UTC in c3p0:JDBC DataSources/Resource Pools