diff --git a/vm/os-unix.cpp b/vm/os-unix.cpp index 075ceff421..f47dc1d363 100644 --- a/vm/os-unix.cpp +++ b/vm/os-unix.cpp @@ -47,15 +47,13 @@ u64 system_micros() return (u64)t.tv_sec * 1000000 + t.tv_usec; } -void sleep_micros(cell usec) -{ - usleep(usec); -} - -void sleep_nanos(timespec ts) +void sleep_nanos(u64 nsec) { + timespec ts; timespec ts_rem; int ret; + ts.tv_sec = nsec / 1000000000; + ts.tv_nsec = nsec % 1000000000; ret = nanosleep(&ts,&ts_rem); while(ret == -1 && errno == EINTR) { diff --git a/vm/os-unix.hpp b/vm/os-unix.hpp index 40d1255c8c..fa9bc71417 100644 --- a/vm/os-unix.hpp +++ b/vm/os-unix.hpp @@ -54,8 +54,7 @@ void dump_stack_signal(int signal, siginfo_t* siginfo, void* uap); u64 system_micros(); u64 nano_count(); -void sleep_micros(cell usec); -void sleep_nanos(cell nsec); +void sleep_nanos(u64 nsec); void init_platform_globals(); diff --git a/vm/os-windows.cpp b/vm/os-windows.cpp index 773e40fbba..8a7cf9024b 100755 --- a/vm/os-windows.cpp +++ b/vm/os-windows.cpp @@ -126,14 +126,9 @@ segment::~segment() fatal_error("Segment deallocation failed",0); } -void factor_vm::sleep_micros(u64 usec) +void sleep_nanos(u64 nsec) { - Sleep((DWORD)(usec / 1000)); -} - -void factor_vm::sleep_nanos(u64 nsec) -{ - Sleep((DWORD)(nsec / 1000000)); + Sleep((DWORD)(nsec/1000000)); } long getpagesize() diff --git a/vm/run.cpp b/vm/run.cpp index 9203dcf1e9..ebe3678439 100755 --- a/vm/run.cpp +++ b/vm/run.cpp @@ -20,7 +20,7 @@ void factor_vm::primitive_nano_count() void factor_vm::primitive_sleep() { - sleep_micros(to_cell(dpop())); + sleep_nanos(factor_vm::to_unsigned_8(dpop())); } } diff --git a/vm/vm.hpp b/vm/vm.hpp index 4f2544db25..04eaf3d2ef 100755 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -674,7 +674,6 @@ struct factor_vm // os-windows #if defined(WINDOWS) - void sleep_micros(u64 usec); void sleep_nanos(u64 nsec); const vm_char *vm_executable_path(); const vm_char *default_image_path();