зеркало из https://github.com/github/ruby.git
[Feature #19590] Show the invalid clock argument
Include the failed clock argument in the error message from `Process.clock_gettime` and `Process.clock_getres`.
This commit is contained in:
Родитель
86db7a1cb8
Коммит
3612b1bed8
21
process.c
21
process.c
|
@ -7960,6 +7960,11 @@ ruby_real_ms_time(void)
|
|||
# define NUM2CLOCKID(x) 0
|
||||
#endif
|
||||
|
||||
#define clock_failed(name, err, arg) do { \
|
||||
int clock_error = (err); \
|
||||
rb_syserr_fail_str(clock_error, rb_sprintf("clock_" name "(%+"PRIsVALUE")", (arg))); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* Process.clock_gettime(clock_id [, unit]) -> number
|
||||
|
@ -8260,15 +8265,17 @@ rb_clock_gettime(int argc, VALUE *argv, VALUE _)
|
|||
gettime:
|
||||
ret = clock_gettime(c, &ts);
|
||||
if (ret == -1)
|
||||
rb_sys_fail("clock_gettime");
|
||||
clock_failed("gettime", errno, clk_id);
|
||||
tt.count = (int32_t)ts.tv_nsec;
|
||||
tt.giga_count = ts.tv_sec;
|
||||
denominators[num_denominators++] = 1000000000;
|
||||
goto success;
|
||||
#endif
|
||||
}
|
||||
/* EINVAL emulates clock_gettime behavior when clock_id is invalid. */
|
||||
rb_syserr_fail(EINVAL, 0);
|
||||
else {
|
||||
rb_unexpected_type(clk_id, T_SYMBOL);
|
||||
}
|
||||
clock_failed("gettime", EINVAL, clk_id);
|
||||
|
||||
success:
|
||||
return make_clock_result(&tt, numerators, num_numerators, denominators, num_denominators, unit);
|
||||
|
@ -8433,15 +8440,17 @@ rb_clock_getres(int argc, VALUE *argv, VALUE _)
|
|||
getres:
|
||||
ret = clock_getres(c, &ts);
|
||||
if (ret == -1)
|
||||
rb_sys_fail("clock_getres");
|
||||
clock_failed("getres", errno, clk_id);
|
||||
tt.count = (int32_t)ts.tv_nsec;
|
||||
tt.giga_count = ts.tv_sec;
|
||||
denominators[num_denominators++] = 1000000000;
|
||||
goto success;
|
||||
#endif
|
||||
}
|
||||
/* EINVAL emulates clock_getres behavior when clock_id is invalid. */
|
||||
rb_syserr_fail(EINVAL, 0);
|
||||
else {
|
||||
rb_unexpected_type(clk_id, T_SYMBOL);
|
||||
}
|
||||
clock_failed("getres", EINVAL, clk_id);
|
||||
|
||||
success:
|
||||
if (unit == ID2SYM(id_hertz)) {
|
||||
|
|
|
@ -2156,7 +2156,9 @@ EOS
|
|||
t3 = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond)
|
||||
assert_operator(t1, :<=, t2)
|
||||
assert_operator(t2, :<=, t3)
|
||||
assert_raise(Errno::EINVAL) { Process.clock_gettime(:foo) }
|
||||
assert_raise_with_message(Errno::EINVAL, /:foo/) do
|
||||
Process.clock_gettime(:foo)
|
||||
end
|
||||
end
|
||||
|
||||
def test_clock_gettime_unit
|
||||
|
@ -2261,7 +2263,9 @@ EOS
|
|||
rescue Errno::EINVAL
|
||||
else
|
||||
assert_kind_of(Integer, r)
|
||||
assert_raise(Errno::EINVAL) { Process.clock_getres(:foo) }
|
||||
assert_raise_with_message(Errno::EINVAL, /:foo/) do
|
||||
Process.clock_getres(:foo)
|
||||
end
|
||||
end
|
||||
|
||||
def test_clock_getres_constants
|
||||
|
|
Загрузка…
Ссылка в новой задаче