async almost finished, use valgrind to debug