From 868f0aac37cf6c879471c3b8e65e6db623460ce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristj=C3=A1n=20Valur=20J=C3=B3nsson?= Date: Tue, 19 Mar 2013 13:53:56 -0700 Subject: issue #9090 : Take the same approach for socketmodule as daytimemodule when it needs support from timemodule (which is a .so on linux): link in timemodule.c for the required functions. --- Include/timefuncs.h | 3 +++ Modules/socketmodule.c | 27 ++++----------------------- Modules/timemodule.c | 2 +- setup.py | 5 +++-- 4 files changed, 11 insertions(+), 26 deletions(-) diff --git a/Include/timefuncs.h b/Include/timefuncs.h index 553142d..a9d26a7 100644 --- a/Include/timefuncs.h +++ b/Include/timefuncs.h @@ -16,6 +16,9 @@ extern "C" { */ PyAPI_FUNC(time_t) _PyTime_DoubleToTimet(double x); +/* Get the current time since the epoch in seconds */ +PyAPI_FUNC(double) _PyTime_FloatTime(void); + #ifdef __cplusplus } diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 76f087b..bdc055d 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -92,6 +92,7 @@ Local naming conventions: #include "Python.h" #include "structmember.h" +#include "timefuncs.h" #undef MAX #define MAX(x, y) ((x) < (y) ? (y) : (x)) @@ -751,43 +752,23 @@ internal_select(PySocketSockObject *s, int writing) } END_SELECT_LOOP(s) */ -#ifdef _WIN32 -/* _PyTime_floattime is exported from timemodule.c which is a builtin on windows - * but not on linux. The problem we are fixing is mostly a windows problem so - * we leave it at that. - */ -#define HAVE_PYTIME_FLOATTIME -#endif -#ifdef HAVE_PYTIME_FLOATTIME -PyAPI_FUNC(double) _PyTime_floattime(void); /* defined in timemodule.c */ #define BEGIN_SELECT_LOOP(s) \ { \ double deadline, interval = s->sock_timeout; \ int has_timeout = s->sock_timeout > 0.0; \ if (has_timeout) { \ - deadline = _PyTime_floattime() + s->sock_timeout; \ + deadline = _PyTime_FloatTime() + s->sock_timeout; \ } \ while (1) { \ - errno = 0; \ + errno = 0; #define END_SELECT_LOOP(s) \ if (!has_timeout || \ (!CHECK_ERRNO(EWOULDBLOCK) && !CHECK_ERRNO(EAGAIN))) \ break; \ - interval = deadline - _PyTime_floattime(); \ + interval = deadline - _PyTime_FloatTime(); \ } \ } -#else -#define BEGIN_SELECT_LOOP(s) \ - { \ - double interval = s->sock_timeout; \ - do { \ - errno = 0; \ - -#define END_SELECT_LOOP(s) \ - } while(0); \ - } -#endif /* Initialize a new socket object. */ diff --git a/Modules/timemodule.c b/Modules/timemodule.c index c87805f..12c43b0 100644 --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1058,7 +1058,7 @@ floatsleep(double secs) /* export floattime to socketmodule.c */ PyAPI_FUNC(double) -_PyTime_floattime(void) +_PyTime_FloatTime(void) { return floattime(); } diff --git a/setup.py b/setup.py index b728bf6..77edda4 100644 --- a/setup.py +++ b/setup.py @@ -777,8 +777,9 @@ class PyBuildExt(build_ext): exts.append( Extension('_csv', ['_csv.c']) ) # socket(2) - exts.append( Extension('_socket', ['socketmodule.c'], - depends = ['socketmodule.h']) ) + exts.append( Extension('_socket', ['socketmodule.c', 'timemodule.c'], + depends=['socketmodule.h'], + libraries=math_libs) ) # Detect SSL support for the socket module (via _ssl) search_for_ssl_incs_in = [ '/usr/local/ssl/include', -- cgit v0.12