memory fix: set `free` in listener list
test: simplify data passing