gh-115714: Don't use CLOCK_PROCESS_CPUTIME_ID and times() on WASI (GH-115757)

* gh-115714: Don't use CLOCK_PROCESS_CPUTIME_ID and times() on WASI

* Add blurb
This commit is contained in:
Petr Viktorin 2024-02-22 12:39:45 +01:00 committed by GitHub
parent baae73d730
commit 8aa372edcd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 5 deletions

View File

@ -0,0 +1,4 @@
On WASI, the :mod:`time` module no longer get process time using ``times()``
or ``CLOCK_PROCESS_CPUTIME_ID``, system API is that is unreliable and is
likely to be removed from WASI. The affected clock functions fall back to
calling ``clock()``.

View File

@ -76,7 +76,8 @@ static int pysleep(PyTime_t timeout);
typedef struct {
PyTypeObject *struct_time_type;
#ifdef HAVE_TIMES
// gh-115714: Don't use times() on WASI.
#if defined(HAVE_TIMES) && !defined(__wasi__)
// times() clock frequency in hertz
_PyTimeFraction times_base;
#endif
@ -1210,7 +1211,8 @@ PyDoc_STRVAR(perf_counter_ns_doc,
Performance counter for benchmarking as nanoseconds.");
#ifdef HAVE_TIMES
// gh-115714: Don't use times() on WASI.
#if defined(HAVE_TIMES) && !defined(__wasi__)
static int
process_time_times(time_module_state *state, PyTime_t *tp,
_Py_clock_info_t *info)
@ -1278,8 +1280,10 @@ py_process_time(time_module_state *state, PyTime_t *tp,
#else
/* clock_gettime */
// gh-115714: Don't use CLOCK_PROCESS_CPUTIME_ID on WASI.
#if defined(HAVE_CLOCK_GETTIME) \
&& (defined(CLOCK_PROCESS_CPUTIME_ID) || defined(CLOCK_PROF))
&& (defined(CLOCK_PROCESS_CPUTIME_ID) || defined(CLOCK_PROF)) \
&& !defined(__wasi__)
struct timespec ts;
if (HAVE_CLOCK_GETTIME_RUNTIME) {
@ -1341,7 +1345,8 @@ py_process_time(time_module_state *state, PyTime_t *tp,
#endif
/* times() */
#ifdef HAVE_TIMES
// gh-115714: Don't use times() on WASI.
#if defined(HAVE_TIMES) && !defined(__wasi__)
int res = process_time_times(state, tp, info);
if (res < 0) {
return -1;
@ -2068,7 +2073,8 @@ time_exec(PyObject *module)
}
#endif
#ifdef HAVE_TIMES
// gh-115714: Don't use times() on WASI.
#if defined(HAVE_TIMES) && !defined(__wasi__)
long ticks_per_second;
if (_Py_GetTicksPerSecond(&ticks_per_second) < 0) {
PyErr_SetString(PyExc_RuntimeError,