[Python-checkins] cpython: Close #20656: Fix select.select() on OpenBSD 64-bit
victor.stinner
python-checkins at python.org
Tue Feb 18 01:36:29 CET 2014
http://hg.python.org/cpython/rev/79ccf36b0fd0
changeset: 89239:79ccf36b0fd0
user: Victor Stinner <victor.stinner at gmail.com>
date: Tue Feb 18 01:35:40 2014 +0100
summary:
Close #20656: Fix select.select() on OpenBSD 64-bit
files:
Modules/selectmodule.c | 22 ++++++++++++----------
1 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -212,11 +212,18 @@
return NULL;
}
else {
-#ifdef MS_WINDOWS
+ /* On OpenBSD 5.4, timeval.tv_sec is a long.
+ * Example: long is 64-bit, whereas time_t is 32-bit. */
time_t sec;
- if (_PyTime_ObjectToTimeval(tout, &sec, &tv.tv_usec,
+ /* On OS X 64-bit, timeval.tv_usec is an int (and thus still 4
+ bytes as required), but no longer defined by a long. */
+ long usec;
+ if (_PyTime_ObjectToTimeval(tout, &sec, &usec,
_PyTime_ROUND_UP) == -1)
return NULL;
+#ifdef MS_WINDOWS
+ /* On Windows, timeval.tv_sec is a long (32 bit),
+ * whereas time_t can be 64-bit. */
assert(sizeof(tv.tv_sec) == sizeof(long));
#if SIZEOF_TIME_T > SIZEOF_LONG
if (sec > LONG_MAX) {
@@ -225,16 +232,11 @@
return NULL;
}
#endif
- tv.tv_sec = (long)sec;
#else
- /* 64-bit OS X has struct timeval.tv_usec as an int (and thus still 4
- bytes as required), but no longer defined by a long. */
- long tv_usec;
- if (_PyTime_ObjectToTimeval(tout, &tv.tv_sec, &tv_usec,
- _PyTime_ROUND_UP) == -1)
- return NULL;
- tv.tv_usec = tv_usec;
+ assert(sizeof(tv.tv_sec) >= sizeof(sec));
#endif
+ tv.tv_sec = sec;
+ tv.tv_usec = usec;
if (tv.tv_sec < 0) {
PyErr_SetString(PyExc_ValueError, "timeout must be non-negative");
return NULL;
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list