void tsleep(Rendez *r, int (*fn)(void*), void *arg, int32_t ms) { Mach *m = machp(); if (m->externup->tt){ print("tsleep: timer active: mode %d, tf %#p\n", m->externup->tmode, m->externup->tf); timerdel(m->externup); } m->externup->tns = MS2NS(ms); m->externup->tf = twakeup; m->externup->tmode = Trelative; m->externup->ta = m->externup; m->externup->trend = r; m->externup->tfn = fn; timeradd(m->externup); if(waserror()){ timerdel(m->externup); nexterror(); } sleep(r, tfn, arg); if (m->externup->tt) timerdel(m->externup); m->externup->twhen = 0; poperror(); }
void tsleep(Rendez *r, int (*fn)(void*), void *arg, ulong ms) { if(up->tt != nil){ print("tsleep: timer active: mode %d, tf %#p\n", up->tmode, up->tf); timerdel(up); } up->tns = MS2NS(ms); up->tf = twakeup; up->tmode = Trelative; up->ta = up; up->trend = r; up->tfn = fn; timeradd(up); if(waserror()){ timerdel(up); nexterror(); } sleep(r, tfn, arg); if(up->tt != nil) timerdel(up); up->twhen = 0; poperror(); }
void tsleep(Rendez *r, int (*fn)(void*), void *arg, int64_t ms) { Proc *up = externup(); if (up->Timer.tt){ print("tsleep: timer active: mode %d, tf %#p\n", up->Timer.tmode, up->Timer.tf); timerdel(&up->Timer); } up->Timer.tns = MS2NS(ms); up->Timer.tf = twakeup; up->Timer.tmode = Trelative; up->Timer.ta = up; up->trend = r; up->tfn = fn; timeradd(&up->Timer); if(waserror()){ timerdel(&up->Timer); nexterror(); } sleep(r, tfn, arg); if (up->Timer.tt) timerdel(&up->Timer); up->Timer.twhen = 0; poperror(); }