try protothreads