]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-110850: Use public PyTime functions (#115746)
authorVictor Stinner <vstinner@python.org>
Tue, 20 Feb 2024 23:31:30 +0000 (00:31 +0100)
committerGitHub <noreply@github.com>
Tue, 20 Feb 2024 23:31:30 +0000 (23:31 +0000)
Replace private _PyTime functions with public PyTime functions.

random_seed_time_pid() now reports errors to its caller.

12 files changed:
Include/internal/pycore_time.h
Modules/_datetimemodule.c
Modules/_queuemodule.c
Modules/_randommodule.c
Modules/_testinternalcapi/pytime.c
Modules/_testsinglephase.c
Modules/_threadmodule.c
Modules/selectmodule.c
Modules/socketmodule.c
Modules/timemodule.c
Python/gc.c
Python/gc_free_threading.c

index 9692bbc89711a5533e2e82df91f9bd9936b68259..682aee2170bdaef361bdb40e6b3c929403db7f77 100644 (file)
@@ -321,7 +321,6 @@ extern int _PyTime_PerfCounterWithInfo(
 // Alias for backward compatibility
 #define _PyTime_MIN PyTime_MIN
 #define _PyTime_MAX PyTime_MAX
-#define _PyTime_AsSecondsDouble PyTime_AsSecondsDouble
 
 
 // --- _PyDeadline -----------------------------------------------------------
index 9fd59c34de6cefcc7d421668154ba93ff998deac..a626bda2ea9be9f66434f7f54937134c2a5873e9 100644 (file)
@@ -5133,7 +5133,11 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, PyObject *timestamp,
 static PyObject *
 datetime_best_possible(PyObject *cls, TM_FUNC f, PyObject *tzinfo)
 {
-    PyTime_t ts = _PyTime_TimeUnchecked();
+    PyTime_t ts;
+    if (PyTime_Time(&ts) < 0) {
+        return NULL;
+    }
+
     time_t secs;
     int us;
 
index 5ef1cea24dce68c30470e09b91bb337fd33146d6..5db9b645849fcd8a8f8ce6277721d6a68e2fb20d 100644 (file)
@@ -6,7 +6,7 @@
 #include "pycore_ceval.h"         // Py_MakePendingCalls()
 #include "pycore_moduleobject.h"  // _PyModule_GetState()
 #include "pycore_parking_lot.h"
-#include "pycore_time.h"          // PyTime_t
+#include "pycore_time.h"          // _PyTime_FromSecondsObject()
 
 #include <stdbool.h>
 #include <stddef.h>               // offsetof()
index 920645b453536ab2fd18b0e84874f212b302554b..56b891dfe0f85f84a65a79214d107fe991f66e1c 100644 (file)
@@ -75,7 +75,6 @@
 #include "pycore_modsupport.h"    // _PyArg_NoKeywords()
 #include "pycore_moduleobject.h"  // _PyModule_GetState()
 #include "pycore_pylifecycle.h"   // _PyOS_URandomNonblock()
-#include "pycore_time.h"          // _PyTime_TimeUnchecked()
 
 #ifdef HAVE_UNISTD_H
 #  include <unistd.h>             // getpid()
@@ -260,13 +259,15 @@ random_seed_urandom(RandomObject *self)
     return 0;
 }
 
-static void
+static int
 random_seed_time_pid(RandomObject *self)
 {
     PyTime_t now;
-    uint32_t key[5];
+    if (PyTime_Time(&now) < 0) {
+        return -1;
+    }
 
-    now = _PyTime_TimeUnchecked();
+    uint32_t key[5];
     key[0] = (uint32_t)(now & 0xffffffffU);
     key[1] = (uint32_t)(now >> 32);
 
@@ -278,11 +279,14 @@ random_seed_time_pid(RandomObject *self)
     key[2] = 0;
 #endif
 
-    now = _PyTime_MonotonicUnchecked();
+    if (PyTime_Monotonic(&now) < 0) {
+        return -1;
+    }
     key[3] = (uint32_t)(now & 0xffffffffU);
     key[4] = (uint32_t)(now >> 32);
 
     init_by_array(self, key, Py_ARRAY_LENGTH(key));
+    return 0;
 }
 
 static int
@@ -300,7 +304,9 @@ random_seed(RandomObject *self, PyObject *arg)
 
             /* Reading system entropy failed, fall back on the worst entropy:
                use the current time and process identifier. */
-            random_seed_time_pid(self);
+            if (random_seed_time_pid(self) < 0) {
+                return -1;
+            }
         }
         return 0;
     }
index 11a02413b8c114c19323553ea034b4bec5ee0aae..2abe5c2b725713bc56d896f08cbdcd85f3c9095d 100644 (file)
@@ -2,10 +2,10 @@
 
 #include "parts.h"
 
-#include "pycore_time.h"
+#include "pycore_time.h"          // _PyTime_FromSeconds()
 
 #ifdef MS_WINDOWS
-#  include <winsock2.h>          // struct timeval
+#  include <winsock2.h>           // struct timeval
 #endif
 
 
index 58d22e2d5dbe56239e416bad764a5bc7ed021a0e..092673a9ea43e110125ac3d2fdfc193cbc3707b9 100644 (file)
@@ -8,7 +8,6 @@
 //#include <time.h>
 #include "Python.h"
 #include "pycore_namespace.h"     // _PyNamespace_New()
-#include "pycore_time.h"          // PyTime_t
 
 
 typedef struct {
@@ -71,13 +70,13 @@ _set_initialized(PyTime_t *initialized)
 {
     /* We go strictly monotonic to ensure each time is unique. */
     PyTime_t prev;
-    if (_PyTime_MonotonicWithInfo(&prev, NULL) != 0) {
+    if (PyTime_Monotonic(&prev) != 0) {
         return -1;
     }
     /* We do a busy sleep since the interval should be super short. */
     PyTime_t t;
     do {
-        if (_PyTime_MonotonicWithInfo(&t, NULL) != 0) {
+        if (PyTime_Monotonic(&t) != 0) {
             return -1;
         }
     } while (t == prev);
@@ -136,7 +135,7 @@ init_module(PyObject *module, module_state *state)
         return -1;
     }
 
-    double d = _PyTime_AsSecondsDouble(state->initialized);
+    double d = PyTime_AsSecondsDouble(state->initialized);
     if (PyModule_Add(module, "_module_initialized", PyFloat_FromDouble(d)) < 0) {
         return -1;
     }
@@ -157,7 +156,7 @@ common_state_initialized(PyObject *self, PyObject *Py_UNUSED(ignored))
     if (state == NULL) {
         Py_RETURN_NONE;
     }
-    double d = _PyTime_AsSecondsDouble(state->initialized);
+    double d = PyTime_AsSecondsDouble(state->initialized);
     return PyFloat_FromDouble(d);
 }
 
index addaafb4f860398e5c60938ddf2f582208a7b7e8..25e100278790552d162834e35c40ec257b431a15 100644 (file)
@@ -1948,7 +1948,7 @@ thread_module_exec(PyObject *module)
 
     // TIMEOUT_MAX
     double timeout_max = (double)PY_TIMEOUT_MAX * 1e-6;
-    double time_max = _PyTime_AsSecondsDouble(_PyTime_MAX);
+    double time_max = PyTime_AsSecondsDouble(_PyTime_MAX);
     timeout_max = Py_MIN(timeout_max, time_max);
     // Round towards minus infinity
     timeout_max = floor(timeout_max);
index 57d55a5611f12157e23762b53c85d1505be48fcd..f16173aafa7d3c8d2f113aa6edfa6c9ca663a863 100644 (file)
@@ -15,7 +15,7 @@
 #include "Python.h"
 #include "pycore_fileutils.h"     // _Py_set_inheritable()
 #include "pycore_import.h"        // _PyImport_GetModuleAttrString()
-#include "pycore_time.h"          // PyTime_t
+#include "pycore_time.h"          // _PyTime_FromSecondsObject()
 
 #include <stdbool.h>
 #include <stddef.h>               // offsetof()
index 836cf6c05b31965c4418bad70ac7fd4319b04338..cd9a803648be712b143b58d6914da8244e7f3ba5 100644 (file)
@@ -3113,7 +3113,7 @@ sock_gettimeout(PySocketSockObject *s, PyObject *Py_UNUSED(ignored))
         Py_RETURN_NONE;
     }
     else {
-        double seconds = _PyTime_AsSecondsDouble(s->sock_timeout);
+        double seconds = PyTime_AsSecondsDouble(s->sock_timeout);
         return PyFloat_FromDouble(seconds);
     }
 }
@@ -6917,7 +6917,7 @@ socket_getdefaulttimeout(PyObject *self, PyObject *Py_UNUSED(ignored))
         Py_RETURN_NONE;
     }
     else {
-        double seconds = _PyTime_AsSecondsDouble(state->defaulttimeout);
+        double seconds = PyTime_AsSecondsDouble(state->defaulttimeout);
         return PyFloat_FromDouble(seconds);
     }
 }
index 28dba903d2b9e87b2176595329c0dd522f653928..ac96ed40a9bb2788b0a1d25bfdd6528576d81e5e 100644 (file)
@@ -98,24 +98,16 @@ get_time_state(PyObject *module)
 static PyObject*
 _PyFloat_FromPyTime(PyTime_t t)
 {
-    double d = _PyTime_AsSecondsDouble(t);
+    double d = PyTime_AsSecondsDouble(t);
     return PyFloat_FromDouble(d);
 }
 
 
-static int
-get_system_time(PyTime_t *t)
-{
-    // Avoid _PyTime_TimeUnchecked() which silently ignores errors.
-    return _PyTime_TimeWithInfo(t, NULL);
-}
-
-
 static PyObject *
 time_time(PyObject *self, PyObject *unused)
 {
     PyTime_t t;
-    if (get_system_time(&t) < 0) {
+    if (PyTime_Time(&t) < 0) {
         return NULL;
     }
     return _PyFloat_FromPyTime(t);
@@ -132,7 +124,7 @@ static PyObject *
 time_time_ns(PyObject *self, PyObject *unused)
 {
     PyTime_t t;
-    if (get_system_time(&t) < 0) {
+    if (PyTime_Time(&t) < 0) {
         return NULL;
     }
     return _PyTime_AsNanosecondsObject(t);
@@ -1156,19 +1148,11 @@ should not be relied on.");
 #endif /* HAVE_WORKING_TZSET */
 
 
-static int
-get_monotonic(PyTime_t *t)
-{
-    // Avoid _PyTime_MonotonicUnchecked() which silently ignores errors.
-    return _PyTime_MonotonicWithInfo(t, NULL);
-}
-
-
 static PyObject *
 time_monotonic(PyObject *self, PyObject *unused)
 {
     PyTime_t t;
-    if (get_monotonic(&t) < 0) {
+    if (PyTime_Monotonic(&t) < 0) {
         return NULL;
     }
     return _PyFloat_FromPyTime(t);
@@ -1183,7 +1167,7 @@ static PyObject *
 time_monotonic_ns(PyObject *self, PyObject *unused)
 {
     PyTime_t t;
-    if (get_monotonic(&t) < 0) {
+    if (PyTime_Monotonic(&t) < 0) {
         return NULL;
     }
     return _PyTime_AsNanosecondsObject(t);
@@ -1195,19 +1179,11 @@ PyDoc_STRVAR(monotonic_ns_doc,
 Monotonic clock, cannot go backward, as nanoseconds.");
 
 
-static int
-get_perf_counter(PyTime_t *t)
-{
-    // Avoid _PyTime_PerfCounterUnchecked() which silently ignores errors.
-    return _PyTime_PerfCounterWithInfo(t, NULL);
-}
-
-
 static PyObject *
 time_perf_counter(PyObject *self, PyObject *unused)
 {
     PyTime_t t;
-    if (get_perf_counter(&t) < 0) {
+    if (PyTime_PerfCounter(&t) < 0) {
         return NULL;
     }
     return _PyFloat_FromPyTime(t);
@@ -1223,7 +1199,7 @@ static PyObject *
 time_perf_counter_ns(PyObject *self, PyObject *unused)
 {
     PyTime_t t;
-    if (get_perf_counter(&t) < 0) {
+    if (PyTime_PerfCounter(&t) < 0) {
         return NULL;
     }
     return _PyTime_AsNanosecondsObject(t);
@@ -2190,7 +2166,7 @@ pysleep(PyTime_t timeout)
     PyTime_t deadline, monotonic;
     int err = 0;
 
-    if (get_monotonic(&monotonic) < 0) {
+    if (PyTime_Monotonic(&monotonic) < 0) {
         return -1;
     }
     deadline = monotonic + timeout;
@@ -2243,7 +2219,7 @@ pysleep(PyTime_t timeout)
         }
 
 #ifndef HAVE_CLOCK_NANOSLEEP
-        if (get_monotonic(&monotonic) < 0) {
+        if (PyTime_Monotonic(&monotonic) < 0) {
             return -1;
         }
         timeout = deadline - monotonic;
index a031897d235deaf346d48c65ac1180f191b58c2f..ea3b596d1713dfc2ed89e2d2ffc48413cad61edb 100644 (file)
@@ -1428,7 +1428,7 @@ gc_collect_main(PyThreadState *tstate, int generation, _PyGC_Reason reason)
             debug_cycle("uncollectable", FROM_GC(gc));
     }
     if (gcstate->debug & _PyGC_DEBUG_STATS) {
-        double d = _PyTime_AsSecondsDouble(_PyTime_PerfCounterUnchecked() - t1);
+        double d = PyTime_AsSecondsDouble(_PyTime_PerfCounterUnchecked() - t1);
         PySys_WriteStderr(
             "gc: done, %zd unreachable, %zd uncollectable, %.4fs elapsed\n",
             n+m, n, d);
index 4d886ee369db11f6c66c2e7505a8e76125759ca1..14790899825de1a5484e48f48b57dc79c93e068b 100644 (file)
@@ -1136,7 +1136,7 @@ gc_collect_main(PyThreadState *tstate, int generation, _PyGC_Reason reason)
     n = state.uncollectable;
 
     if (gcstate->debug & _PyGC_DEBUG_STATS) {
-        double d = _PyTime_AsSecondsDouble(_PyTime_PerfCounterUnchecked() - t1);
+        double d = PyTime_AsSecondsDouble(_PyTime_PerfCounterUnchecked() - t1);
         PySys_WriteStderr(
             "gc: done, %zd unreachable, %zd uncollectable, %.4fs elapsed\n",
             n+m, n, d);