diff options
author | Victor Stinner <vstinner@python.org> | 2021-09-25 00:31:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-25 00:31:56 +0200 |
commit | f35ddf24227e834c9b6b39ad23a0ec382b4de48b (patch) | |
tree | 28917201368bc58cacdf2dc46007713d659b3c4d | |
parent | bpo-45020: Fix some corner cases for frozen module generation. (gh-28538) (diff) | |
download | cpython-f35ddf24227e834c9b6b39ad23a0ec382b4de48b.tar.gz cpython-f35ddf24227e834c9b6b39ad23a0ec382b4de48b.tar.bz2 cpython-f35ddf24227e834c9b6b39ad23a0ec382b4de48b.zip |
bpo-41299: QueryPerformanceFrequency() cannot fail (GH-28552)
py_win_perf_counter_frequency() no longer checks for
QueryPerformanceFrequency() failure. According to the
QueryPerformanceFrequency() documentation, the function can no longer
fails since Windows XP.
-rw-r--r-- | Python/pytime.c | 28 |
1 files changed, 7 insertions, 21 deletions
diff --git a/Python/pytime.c b/Python/pytime.c index 7f9f301f720..b47a573488b 100644 --- a/Python/pytime.c +++ b/Python/pytime.c @@ -1050,26 +1050,14 @@ py_win_perf_counter_frequency(LONGLONG *pfrequency, int raise) LONGLONG frequency; LARGE_INTEGER freq; - if (!QueryPerformanceFrequency(&freq)) { - if (raise) { - PyErr_SetFromWindowsErr(0); - } - return -1; - } + // Since Windows XP, the function cannot fail. + (void)QueryPerformanceFrequency(&freq); frequency = freq.QuadPart; - /* Sanity check: should never occur in practice */ - if (frequency < 1) { - if (raise) { - PyErr_SetString(PyExc_RuntimeError, - "invalid QueryPerformanceFrequency"); - } - return -1; - } - - /* Check that frequency can be casted to _PyTime_t. + // Since Windows XP, frequency cannot be zero. + assert(frequency >= 1); - Make also sure that (ticks * SEC_TO_NS) cannot overflow in + /* Make also sure that (ticks * SEC_TO_NS) cannot overflow in _PyTime_MulDiv(), with ticks < frequency. Known QueryPerformanceFrequency() values: @@ -1078,10 +1066,8 @@ py_win_perf_counter_frequency(LONGLONG *pfrequency, int raise) * 3,579,545 Hz (3.6 MHz): 279 ns resolution None of these frequencies can overflow with 64-bit _PyTime_t, but - check for overflow, just in case. */ - if (frequency > _PyTime_MAX - || frequency > (LONGLONG)_PyTime_MAX / (LONGLONG)SEC_TO_NS) - { + check for integer overflow just in case. */ + if (frequency > _PyTime_MAX / SEC_TO_NS) { if (raise) { PyErr_SetString(PyExc_OverflowError, "QueryPerformanceFrequency is too large"); |