summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Modules/timemodule.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index fa7a635..cebcc68 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -835,10 +835,17 @@ floatsleep(double secs)
}
#else /* !MSDOS */
#ifdef MS_WIN32
- /* XXX Can't interrupt this sleep */
- Py_BEGIN_ALLOW_THREADS
- Sleep((int)(secs*1000));
- Py_END_ALLOW_THREADS
+ {
+ double millisecs = secs * 1000.0;
+ if (millisecs > (double)ULONG_MAX) {
+ PyErr_SetString(PyExc_OverflowError, "sleep length is too large");
+ return -1;
+ }
+ /* XXX Can't interrupt this sleep */
+ Py_BEGIN_ALLOW_THREADS
+ Sleep((unsigned long)millisecs);
+ Py_END_ALLOW_THREADS
+ }
#else /* !MS_WIN32 */
#ifdef PYOS_OS2
/* This Sleep *IS* Interruptable by Exceptions */