X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_send_api.c;h=023c6ecb4398f78b390574a034b3388bfcb220df;hb=8b0cff922b0538f98364943291ce0359c3da6d88;hp=4caf6eec838696bfbd046116016f3bad58048c1b;hpb=781c90c0447166dd52ef881ae15751fa466c32fb;p=m6w6%2Fext-http diff --git a/http_send_api.c b/http_send_api.c index 4caf6ee..023c6ec 100644 --- a/http_send_api.c +++ b/http_send_api.c @@ -18,11 +18,11 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif - #include "php.h" + +#include "SAPI.h" #include "php_streams.h" #include "ext/standard/php_lcg.h" -#include "SAPI.h" #include "php_http.h" #include "php_http_std_defs.h" @@ -48,18 +48,24 @@ static inline void _http_flush(TSRMLS_D) /* {{{ static inline void http_sleep() */ static inline void _http_sleep(TSRMLS_D) { - if (HTTP_G(send).throttle_delay >= 0.001) { +#define HTTP_MSEC(s) (s * 1000) +#define HTTP_USEC(s) (HTTP_MSEC(s) * 1000) +#define HTTP_NSEC(s) (HTTP_USEC(s) * 1000) +#define HTTP_NANOSEC (1000 * 1000 * 1000) +#define HTTP_DIFFSEC (0.001) + + if (HTTP_G(send).throttle_delay >= HTTP_DIFFSEC) { #if defined(PHP_WIN32) - Sleep((DWORD) (HTTP_G(send).throttle_delay * 1000)); + Sleep((DWORD) HTTP_MSEC(HTTP_G(send).throttle_delay)); #elif defined(HAVE_USLEEP) - usleep(HTTP_G(send).throttle_delay * 1000000); + usleep(HTTP_USEC(HTTP_G(send).throttle_delay)); #elif defined(HAVE_NANOSLEEP) struct timespec req, rem; req.tv_sec = (time_t) HTTP_G(send).throttle_delay; - req.tv_nsec = (HTTP_G(send).throttle_delay * 1000000000) % 1000000000; + req.tv_nsec = HTTP_NSEC(HTTP_G(send).throttle_delay) % HTTP_NANOSEC; - while (nanosleep(&req, &rem) && (errno == EINTR) && (rem.tv_nsec > 1000000)) { + while (nanosleep(&req, &rem) && (errno == EINTR) && (HTTP_NSEC(rem.tv_sec) + rem.tv_nsec) > HTTP_NSEC(HTTP_DIFFSEC))) { req.tv_sec = rem.tv_sec; req.tv_nsec = rem.tv_nsec; }