Commit d3eb5774 authored by Guido van Rossum's avatar Guido van Rossum

Patch by Chris Herborth for BeOS code.

He writes:

I had an off-by-1000 error in floatsleep(),
and the problem with time.clock() is that it's not implemented properly
on QNX... ANSI says it's supposed to return _CPU_ time used by the
process, but on QNX it returns the amount of real time used... so I was
confused.
parent d2cd6f8c
...@@ -60,10 +60,7 @@ PERFORMANCE OF THIS SOFTWARE. ...@@ -60,10 +60,7 @@ PERFORMANCE OF THIS SOFTWARE.
#endif #endif
#ifdef HAVE_FTIME #ifdef HAVE_FTIME
#ifndef __BEOS__
/* We have ftime(), but not in the headers (PR2). - [cjh] */
#include <sys/timeb.h> #include <sys/timeb.h>
#endif
#if !defined(MS_WINDOWS) && !defined(PYOS_OS2) #if !defined(MS_WINDOWS) && !defined(PYOS_OS2)
extern int ftime(); extern int ftime();
#endif /* MS_WINDOWS */ #endif /* MS_WINDOWS */
...@@ -98,6 +95,10 @@ extern int ftime(); ...@@ -98,6 +95,10 @@ extern int ftime();
/* For bigtime_t, snooze(). - [cjh] */ /* For bigtime_t, snooze(). - [cjh] */
#include <support/SupportDefs.h> #include <support/SupportDefs.h>
#include <kernel/OS.h> #include <kernel/OS.h>
#ifndef CLOCKS_PER_SEC
/* C'mon, fix the bloody headers... - [cjh] */
#define CLOCKS_PER_SEC 1000
#endif
#endif #endif
/* Forward declarations */ /* Forward declarations */
...@@ -705,7 +706,7 @@ floattime() ...@@ -705,7 +706,7 @@ floattime()
} }
#endif /* !HAVE_GETTIMEOFDAY */ #endif /* !HAVE_GETTIMEOFDAY */
{ {
#if defined(HAVE_FTIME) && !defined(__BEOS__) #if defined(HAVE_FTIME)
struct timeb t; struct timeb t;
ftime(&t); ftime(&t);
return (double)t.time + (double)t.millitm * (double)0.001; return (double)t.time + (double)t.millitm * (double)0.001;
...@@ -811,20 +812,13 @@ floatsleep(double secs) ...@@ -811,20 +812,13 @@ floatsleep(double secs)
#ifdef __BEOS__ #ifdef __BEOS__
/* This sleep *CAN BE* interrupted. */ /* This sleep *CAN BE* interrupted. */
{ {
bigtime_t frac, seconds;
extern double fmod Py_PROTO((double,double));
extern double floor Py_PROTO((double));
if( secs <= 0.0 ) { if( secs <= 0.0 ) {
return; return;
} }
frac = (bigtime_t)fmod( secs, 1.0 );
seconds = (bigtime_t)floor( secs );
Py_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
if( snooze( seconds * (bigtime_t)1000 + frac ) == B_INTERRUPTED ) { /* BeOS snooze() is in microseconds... */
if( snooze( (bigtime_t)( secs * 1000.0 * 1000.0 ) ) == B_INTERRUPTED ) {
Py_BLOCK_THREADS Py_BLOCK_THREADS
PyErr_SetFromErrno( PyExc_IOError ); PyErr_SetFromErrno( PyExc_IOError );
return -1; return -1;
......
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