]> granicus.if.org Git - python/commitdiff
issue #9090 : Take the same approach for socketmodule as daytimemodule
authorKristján Valur Jónsson <sweskman@gmail.com>
Tue, 19 Mar 2013 20:53:56 +0000 (13:53 -0700)
committerKristján Valur Jónsson <sweskman@gmail.com>
Tue, 19 Mar 2013 20:53:56 +0000 (13:53 -0700)
when it needs support from timemodule (which is a .so on linux):
link in timemodule.c for the required functions.

Include/timefuncs.h
Modules/socketmodule.c
Modules/timemodule.c
setup.py

index 553142dba0fcd76f0429ac6de23ddce88628e406..a9d26a77a12e76ae83e0b54a782198441ee3522d 100644 (file)
@@ -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
 }
index 76f087b71516c844b8bf18d4180dfcc48085555b..bdc055dd384f60c40019a02d999fe93163786971 100644 (file)
@@ -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. */
 
index c87805f0defcab0818c8bb791fcf66bb1c018798..12c43b08fe4a814dfb3388cc8d950afed310da9a 100644 (file)
@@ -1058,7 +1058,7 @@ floatsleep(double secs)
 
 /* export floattime to socketmodule.c */
 PyAPI_FUNC(double)
-_PyTime_floattime(void)
+_PyTime_FloatTime(void)
 {
     return floattime();
 }
index b728bf65a08430c9c3dc2f211aded0d457156682..77edda4a28e64c72455b504fbdfc613aafcaca09 100644 (file)
--- 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',