]> granicus.if.org Git - php/commitdiff
properly restart syscalls
authorSascha Schumann <sas@php.net>
Tue, 1 Jul 2003 05:29:17 +0000 (05:29 +0000)
committerSascha Schumann <sas@php.net>
Tue, 1 Jul 2003 05:29:17 +0000 (05:29 +0000)
sapi/thttpd/thttpd.c

index b5912912a2382695fdb140060fc2fc35b32dac47..c6156c3b1d9e7c91740b23e54afb802bef96cdb7 100644 (file)
@@ -50,6 +50,8 @@ typedef struct {
        int seen_cn;
 } php_thttpd_globals;
 
+#define PHP_SYS_CALL(x) do { x } while (n == -1 && errno == EINTR)
+
 #ifdef PREMIUM_THTTPD
 # define do_keep_alive persistent
 #endif
@@ -73,7 +75,7 @@ static int sapi_thttpd_ub_write(const char *str, uint str_length TSRMLS_DC)
        }
        
        while (str_length > 0) {
-               n = send(TG(hc)->conn_fd, str, str_length, 0);
+               PHP_SYS_CALL(n = send(TG(hc)->conn_fd, str, str_length, 0););
 
                if (n == -1) {
                        if (errno == EAGAIN) {
@@ -108,7 +110,7 @@ static int do_writev(struct iovec *vec, int nvec, int len TSRMLS_DC)
        assert(nvec <= IOV_MAX);
 
        if (TG(sbuf).c == 0) {
-               n = writev(TG(hc)->conn_fd, vec, nvec);
+               PHP_SYS_CALL(n = writev(TG(hc)->conn_fd, vec, nvec););
 
                if (n == -1) {
                        if (errno == EAGAIN) {
@@ -120,8 +122,9 @@ static int do_writev(struct iovec *vec, int nvec, int len TSRMLS_DC)
 
 
                TG(hc)->bytes_sent += n;
-       } else
+       } else {
                n = 0;
+       }
 
        if (n < len) {
                int i;