Perhaps move this to be a gen_listener:cast(self(), {'start_hook'}) and do the actual send_init_hook/1 in handle_cast/2. The reason being, the call to send_init_hook/1 has a potential to block for up to 5000 ms in the ibrowse:send_req/6 call. Because send_init_hook/1 is being called in init/1 of the gen_listener, the supervisor is blocked waiting for init/1 to return, which means on a busy system, a slow HTTP request could cause other calls to slow down waiting to start their cf_singular_call_hooks_listener processes.