- fix segv with http.send.deflate.start_auto=1 and http_send_*()
[m6w6/ext-http] / http_send_api.c
index 10bcdc0ba3b83db4233b390f37166b4513dcc69b..2be92b62dec675c02fd141aaeb65dc3c30ac0391 100644 (file)
@@ -35,28 +35,12 @@ static inline void _http_flush(void *nothing, const char *data, size_t data_len
        php_end_ob_buffer(1, 1 TSRMLS_CC);
        sapi_flush(TSRMLS_C);
        
-#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_MSEC(HTTP_G->send.throttle_delay));
-#elif defined(HAVE_USLEEP)
-               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_NSEC(HTTP_G->send.throttle_delay) % HTTP_NANOSEC;
-
-               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;
-               }
+#if 0
+       fprintf(stderr, "Flushing after writing %u bytes\n", (uint) data_len);
 #endif
+       
+       if (HTTP_G->send.throttle_delay >= HTTP_DIFFSEC) {
+               http_sleep(HTTP_G->send.throttle_delay);
        }
 }
 /* }}} */
@@ -81,7 +65,7 @@ static inline void _http_send_response_start(void **buffer, size_t content_lengt
 #define http_send_response_data_plain(b, d, dl) _http_send_response_data_plain((b), (d), (dl) TSRMLS_CC)
 static inline void _http_send_response_data_plain(void **buffer, const char *data, size_t data_len TSRMLS_DC)
 {
-       if (HTTP_G->send.deflate.encoding) {
+       if (HTTP_G->send.deflate.encoding && *(http_encoding_stream **) buffer) {
 #ifdef HTTP_HAVE_ZLIB
                char *encoded;
                size_t encoded_len;
@@ -153,7 +137,7 @@ static inline void _http_send_response_data_fetch(void **buffer, const void *dat
 #define http_send_response_finish(b) _http_send_response_finish((b) TSRMLS_CC)
 static inline void _http_send_response_finish(void **buffer TSRMLS_DC)
 {
-       if (HTTP_G->send.deflate.encoding) {
+       if (HTTP_G->send.deflate.encoding && *(http_encoding_stream **) buffer) {
 #ifdef HTTP_HAVE_ZLIB
                char *encoded = NULL;
                size_t encoded_len = 0;