Pokud jste používal přímo API Firebirdu, pak je problem jasný: neuvolnil jste statement handle svých příkazů. Ukončení transakce totiž statement handle (i.e. SQL příkazy) neuvolňuje, protože se nejedná o resource transakce, ale spojení k databázi (lze je použít ve více transakcích). Firebird v tomto směru zkrátka funguje jinak než jiné databáze. Toto rozhodně není memory leak.