util: add FuncPool