You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ro...@apache.org on 2006/01/23 16:57:04 UTC

svn commit: r371560 - /httpd/httpd/branches/fcgi-proxy-dev/modules/proxy/mod_proxy_fcgi.c

Author: rooneg
Date: Mon Jan 23 07:57:03 2006
New Revision: 371560

URL: http://svn.apache.org/viewcvs?rev=371560&view=rev
Log:
Update the proxy worker stats when we read/write data from/to the back
end fastcgi process.

* modules/proxy/mod_proxy_fcgi.c
  (send_data, get_data): New wrapper functions that do the sendv/recv
   stuff and then update the proper statistics.
  (send_begin_request, send_environment, dispatch): Use send_data/get_data.

Modified:
    httpd/httpd/branches/fcgi-proxy-dev/modules/proxy/mod_proxy_fcgi.c

Modified: httpd/httpd/branches/fcgi-proxy-dev/modules/proxy/mod_proxy_fcgi.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/branches/fcgi-proxy-dev/modules/proxy/mod_proxy_fcgi.c?rev=371560&r1=371559&r2=371560&view=diff
==============================================================================
--- httpd/httpd/branches/fcgi-proxy-dev/modules/proxy/mod_proxy_fcgi.c (original)
+++ httpd/httpd/branches/fcgi-proxy-dev/modules/proxy/mod_proxy_fcgi.c Mon Jan 23 07:57:03 2006
@@ -142,6 +142,35 @@
     header->reserved = 0;
 }
 
+/* Wrapper for apr_socket_sendv that handles updating the worker stats. */
+static apr_status_t send_data(proxy_conn_rec *conn,
+                              struct iovec *vec,
+                              int nvec,
+                              apr_size_t *len)
+{
+    apr_status_t rv = apr_socket_sendv(conn->sock, vec, nvec, len);
+
+    if (! rv) {
+        conn->worker->s->transferred += *len;
+    }
+
+    return rv;
+}
+
+/* Wrapper for apr_socket_recv that handles updating the worker stats. */
+static apr_status_t get_data(proxy_conn_rec *conn,
+                             char *buffer,
+                             apr_size_t *buflen)
+{
+    apr_status_t rv = apr_socket_recv(conn->sock, buffer, buflen);
+
+    if (! rv) {
+        conn->worker->s->read += *buflen;
+    }
+
+    return rv;
+}
+
 static apr_status_t send_begin_request(proxy_conn_rec *conn, int request_id)
 {
     struct iovec vec[2];
@@ -165,7 +194,7 @@
     vec[1].iov_base = abrb;
     vec[1].iov_len = sizeof(abrb);
 
-    return apr_socket_sendv(conn->sock, vec, 2, &len);
+    return send_data(conn, vec, 2, &len);
 }
 
 static apr_status_t send_environment(proxy_conn_rec *conn, request_rec *r, 
@@ -284,7 +313,7 @@
     vec[1].iov_base = body;
     vec[1].iov_len = bodylen;
 
-    rv = apr_socket_sendv(conn->sock, vec, 2, &len);
+    rv = send_data(conn, vec, 2, &len);
     if (rv) {
         return rv;
     }
@@ -295,7 +324,7 @@
     vec[0].iov_base = farray;
     vec[0].iov_len = sizeof(farray);
 
-    return apr_socket_sendv(conn->sock, vec, 1, &len);
+    return send_data(conn, vec, 1, &len);
 }
 
 enum {
@@ -529,14 +558,11 @@
             /* XXX This should be nonblocking, and if we don't write all
              *     the data we need to keep track of that fact so we can
              *     get to it next time through. */
-            rv = apr_socket_sendv(conn->sock, vec, 2, &len);
+            rv = send_data(conn, vec, 2, &len);
             if (rv != APR_SUCCESS) {
                 break;
             }
 
-            /* XXX AJP updates conn->worker->s->transferred here, do we need
-             *     to? */
-
             if (last_stdin) {
                 pfd.reqevents = APR_POLLIN; /* Done with input data */
 
@@ -546,7 +572,7 @@
                 vec[0].iov_base = farray;
                 vec[0].iov_len = sizeof(farray);
 
-                rv = apr_socket_sendv(conn->sock, vec, 1, &len);
+                rv = send_data(conn, vec, 1, &len);
             }
         }
 
@@ -567,7 +593,7 @@
             /* First, we grab the header... */
             readbuflen = FCGI_HEADER_LEN;
 
-            rv = apr_socket_recv(conn->sock, (char *) farray, &readbuflen);
+            rv = get_data(conn, (char *) farray, &readbuflen);
             if (rv != APR_SUCCESS) {
                 break;
             }
@@ -622,7 +648,7 @@
              * recv call, this will eventually change when we move to real
              * nonblocking recv calls. */
             if (readbuflen != 0) {
-                rv = apr_socket_recv(conn->sock, readbuf, &readbuflen);
+                rv = get_data(conn, readbuf, &readbuflen);
                 if (rv != APR_SUCCESS) {
                     break;
                 }
@@ -650,8 +676,6 @@
                         }
                     }
 
-                    /* XXX Update conn->worker->s->read like AJP does */
-
                     if (seen_end_of_headers) {
                         rv = ap_pass_brigade(r->output_filters, ob);
                         if (rv != APR_SUCCESS) {
@@ -713,7 +737,7 @@
             if (plen) {
                 readbuflen = plen;
 
-                rv = apr_socket_recv(conn->sock, readbuf, &readbuflen);
+                rv = get_data(conn, readbuf, &readbuflen);
                 if (rv != APR_SUCCESS) {
                     break;
                 }