Martin von Löwis avatar Martin von Löwis committed e6dbada

Issue #1040026: Fix os.times result on systems where HZ is incorrect.

Comments (0)

Files changed (2)

 Extension Modules
 -----------------
 
+- Issue #1040026: Fix os.times result on systems where HZ is incorrect.
+
 - Issue #4228: Pack negative values the same way as 2.4 in struct's L format.
 
 - Security Issue #2: imageop did not validate arguments correctly and could

Modules/posixmodule.c

 
 
 #ifdef HAVE_TIMES
-#ifndef HZ
-#define HZ 60 /* Universal constant :-) */
-#endif /* HZ */
-
 #if defined(PYCC_VACPP) && defined(PYOS_OS2)
 static long
 system_uptime(void)
 			     (double)system_uptime() / 1000);
 }
 #else /* not OS2 */
+#define NEED_TICKS_PER_SECOND
+static long ticks_per_second = -1;
 static PyObject *
 posix_times(PyObject *self, PyObject *noargs)
 {
 	if (c == (clock_t) -1)
 		return posix_error();
 	return Py_BuildValue("ddddd",
-			     (double)t.tms_utime / HZ,
-			     (double)t.tms_stime / HZ,
-			     (double)t.tms_cutime / HZ,
-			     (double)t.tms_cstime / HZ,
-			     (double)c / HZ);
+			     (double)t.tms_utime / ticks_per_second,
+			     (double)t.tms_stime / ticks_per_second,
+			     (double)t.tms_cutime / ticks_per_second,
+			     (double)t.tms_cstime / ticks_per_second,
+			     (double)c / ticks_per_second);
 }
 #endif /* not OS2 */
 #endif /* HAVE_TIMES */
 
 		statvfs_result_desc.name = MODNAME ".statvfs_result";
 		PyStructSequence_InitType(&StatVFSResultType, &statvfs_result_desc);
+#ifdef NEED_TICKS_PER_SECOND
+#  if defined(HAVE_SYSCONF) && defined(_SC_CLK_TCK)
+		ticks_per_second = sysconf(_SC_CLK_TCK);
+#  elif defined(HZ)
+		ticks_per_second = HZ;
+#  else
+		ticks_per_second = 60; /* magic fallback value; may be bogus */
+#  endif
+#endif
 	}
 	Py_INCREF((PyObject*) &StatResultType);
 	PyModule_AddObject(m, "stat_result", (PyObject*) &StatResultType);
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.