если нужно реализовтаь тоже самое что ты хотел, но без двойной отправки сообщения, нужно самому вместо gen_server:start_link вызывать proc_loib:start_link, а там самому делать гарантированно proc_lib:init_ack, затем gen_server:enter_loop
enter_loop же можно заменить на handle_continue не уходя из ген сервера вообще, правильно?