gensrv: gen_server abstraction