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