cpython: Issue #13847: time.clock() now raises a RuntimeError if the processor time used
http://hg.python.org/cpython/rev/94b7eb09d0b3 changeset: 74640:94b7eb09d0b3 parent: 74638:dc3de15b43db user: Victor Stinner <victor.stinner@haypocalc.com> date: Fri Jan 27 00:38:48 2012 +0100 summary: Issue #13847: time.clock() now raises a RuntimeError if the processor time used is not available or its value cannot be represented files: Misc/NEWS | 3 +- Modules/timemodule.c | 38 ++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -463,7 +463,8 @@ - Issue #13847: time.localtime() and time.gmtime() now raise an OSError instead 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 minor versions not matching. diff --git a/Modules/timemodule.c b/Modules/timemodule.c --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -62,6 +62,31 @@ Return the current time in seconds since the Epoch.\n\ 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__) /* Win32 has better clock replacement; we have our own version, due to Mark Hammond and Tim Peters */ @@ -79,8 +104,7 @@ if (!QueryPerformanceFrequency(&freq) || freq.QuadPart == 0) { /* Unlikely to happen - this works on all intel machines at least! Revert to clock() */ - return PyFloat_FromDouble(((double)clock()) / - CLOCKS_PER_SEC); + return pyclock(); } divisor = (double)freq.QuadPart; } @@ -91,18 +115,10 @@ #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 * time_clock(PyObject *self, PyObject *unused) { - return PyFloat_FromDouble(((double)clock()) / CLOCKS_PER_SEC); + return pyclock(); } #endif /* HAVE_CLOCK */ -- Repository URL: http://hg.python.org/cpython
participants (1)
-
victor.stinner