ZTS: Use inbuilt monotonic time
Make the test runner try to use the included python monotonic time function instead of calling librt. This makes the test runner work on macos where librt wasn't available. Reviewed-by: Tino Reichardt <milky-zfs@mcmilk.de> Signed-off-by: Andrew Innes <andrew.c12@gmail.com> Closes #14700
This commit is contained in:
parent
a3f82aec93
commit
0b8fdb8ade
|
@ -47,25 +47,25 @@ LOG_OUT = 'LOG_OUT'
|
||||||
LOG_ERR = 'LOG_ERR'
|
LOG_ERR = 'LOG_ERR'
|
||||||
LOG_FILE_OBJ = None
|
LOG_FILE_OBJ = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
from time import monotonic as monotonic_time
|
||||||
|
except ImportError:
|
||||||
|
class timespec(ctypes.Structure):
|
||||||
|
_fields_ = [
|
||||||
|
('tv_sec', ctypes.c_long),
|
||||||
|
('tv_nsec', ctypes.c_long)
|
||||||
|
]
|
||||||
|
|
||||||
class timespec(ctypes.Structure):
|
librt = ctypes.CDLL('librt.so.1', use_errno=True)
|
||||||
_fields_ = [
|
clock_gettime = librt.clock_gettime
|
||||||
('tv_sec', ctypes.c_long),
|
clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)]
|
||||||
('tv_nsec', ctypes.c_long)
|
|
||||||
]
|
|
||||||
|
|
||||||
|
def monotonic_time():
|
||||||
librt = ctypes.CDLL('librt.so.1', use_errno=True)
|
t = timespec()
|
||||||
clock_gettime = librt.clock_gettime
|
if clock_gettime(CLOCK_MONOTONIC, ctypes.pointer(t)) != 0:
|
||||||
clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)]
|
errno_ = ctypes.get_errno()
|
||||||
|
raise OSError(errno_, os.strerror(errno_))
|
||||||
|
return t.tv_sec + t.tv_nsec * 1e-9
|
||||||
def monotonic_time():
|
|
||||||
t = timespec()
|
|
||||||
if clock_gettime(CLOCK_MONOTONIC, ctypes.pointer(t)) != 0:
|
|
||||||
errno_ = ctypes.get_errno()
|
|
||||||
raise OSError(errno_, os.strerror(errno_))
|
|
||||||
return t.tv_sec + t.tv_nsec * 1e-9
|
|
||||||
|
|
||||||
|
|
||||||
class Result(object):
|
class Result(object):
|
||||||
|
|
Loading…
Reference in New Issue