Commit 85fdfa85 authored by Victor Stinner's avatar Victor Stinner
Browse files

Issue #13847: time.clock() now raises a RuntimeError if the processor time used

is not available or its value cannot be represented
parent e9cd9005
...@@ -463,7 +463,8 @@ Library ...@@ -463,7 +463,8 @@ Library
- Issue #13847: time.localtime() and time.gmtime() now raise an OSError instead - Issue #13847: time.localtime() and time.gmtime() now raise an OSError instead
of ValueError on failure. time.ctime() and time.asctime() now raises an of ValueError on failure. time.ctime() and time.asctime() now raises an
OSError if localtime() failed. OSError if localtime() failed. time.clock() now raises a RuntimeError if the
processor time used is not available or its value cannot be represented
- Issue #13862: Fix spurious failure in test_zlib due to runtime/compile time - Issue #13862: Fix spurious failure in test_zlib due to runtime/compile time
minor versions not matching. minor versions not matching.
......
...@@ -62,6 +62,31 @@ PyDoc_STRVAR(time_doc, ...@@ -62,6 +62,31 @@ PyDoc_STRVAR(time_doc,
Return the current time in seconds since the Epoch.\n\ Return the current time in seconds since the Epoch.\n\
Fractions of a second may be present if the system clock provides them."); Fractions of a second may be present if the system clock provides them.");
#if defined(HAVE_CLOCK)
#ifndef CLOCKS_PER_SEC
#ifdef CLK_TCK
#define CLOCKS_PER_SEC CLK_TCK
#else
#define CLOCKS_PER_SEC 1000000
#endif
#endif
static PyObject *
pyclock(void)
{
clock_t value;
value = clock();
if (value == (clock_t)-1) {
PyErr_SetString(PyExc_RuntimeError,
"the processor time used is not available "
"or its value cannot be represented");
return NULL;
}
return PyFloat_FromDouble((double)value / CLOCKS_PER_SEC);
}
#endif /* HAVE_CLOCK */
#if defined(MS_WINDOWS) && !defined(__BORLANDC__) #if defined(MS_WINDOWS) && !defined(__BORLANDC__)
/* Win32 has better clock replacement; we have our own version, due to Mark /* Win32 has better clock replacement; we have our own version, due to Mark
Hammond and Tim Peters */ Hammond and Tim Peters */
...@@ -79,8 +104,7 @@ time_clock(PyObject *self, PyObject *unused) ...@@ -79,8 +104,7 @@ time_clock(PyObject *self, PyObject *unused)
if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) { if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) {
/* Unlikely to happen - this works on all intel /* Unlikely to happen - this works on all intel
machines at least! Revert to clock() */ machines at least! Revert to clock() */
return PyFloat_FromDouble(((double)clock()) / return pyclock();
CLOCKS_PER_SEC);
} }
divisor = (double)freq.QuadPart; divisor = (double)freq.QuadPart;
} }
...@@ -91,18 +115,10 @@ time_clock(PyObject *self, PyObject *unused) ...@@ -91,18 +115,10 @@ time_clock(PyObject *self, PyObject *unused)
#elif defined(HAVE_CLOCK) #elif defined(HAVE_CLOCK)
#ifndef CLOCKS_PER_SEC
#ifdef CLK_TCK
#define CLOCKS_PER_SEC CLK_TCK
#else
#define CLOCKS_PER_SEC 1000000
#endif
#endif
static PyObject * static PyObject *
time_clock(PyObject *self, PyObject *unused) time_clock(PyObject *self, PyObject *unused)
{ {
return PyFloat_FromDouble(((double)clock()) / CLOCKS_PER_SEC); return pyclock();
} }
#endif /* HAVE_CLOCK */ #endif /* HAVE_CLOCK */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment