Author: rhuijben
Date: Wed Nov 18 12:11:17 2015
New Revision: 1714982

URL: http://svn.apache.org/viewvc?rev=1714982&view=rev
Log:
Move some connection specific code from serf_event_trigger() into
serf__process_connection().

* context.c
  (serf_event_trigger): Remove connection specific code here.

* outgoing.c
  (serf__process_connection): Rename to...
  (process_connection): ... this.
  (serf__process_connection): New function wrapping process_connection,
    containing the code that used to be in the context.

Modified:
    serf/trunk/context.c
    serf/trunk/outgoing.c

Modified: serf/trunk/context.c
URL: 
http://svn.apache.org/viewvc/serf/trunk/context.c?rev=1714982&r1=1714981&r2=1714982&view=diff
==============================================================================
--- serf/trunk/context.c (original)
+++ serf/trunk/context.c Wed Nov 18 12:11:17 2015
@@ -225,46 +225,16 @@ apr_status_t serf_event_trigger(
     void *serf_baton,
     const apr_pollfd_t *desc)
 {
-    apr_pollfd_t tdesc = { 0 };
     apr_status_t status = APR_SUCCESS;
     serf_io_baton_t *io = serf_baton;
 
     if (io->type == SERF_IO_CONN) {
         serf_connection_t *conn = io->u.conn;
-        serf_context_t *ctx = conn->ctx;
 
-        /* If this connection has already failed, return the error again, and 
try
-         * to remove it from the pollset again
-         */
-        if (conn->status) {
-            tdesc.desc_type = APR_POLL_SOCKET;
-            tdesc.desc.s = conn->skt;
-            tdesc.reqevents = conn->reqevents;
-            ctx->pollset_rm(ctx->pollset_baton,
-                            &tdesc, &conn->baton);
-            return conn->status;
-        }
-        /* apr_pollset_poll() can return a conn multiple times... */
-        if ((conn->seen_in_pollset & desc->rtnevents) != 0 ||
-            (conn->seen_in_pollset & APR_POLLHUP) != 0) {
-            return APR_SUCCESS;
-        }
-
-        conn->seen_in_pollset |= desc->rtnevents;
-
-        if ((conn->status = serf__process_connection(conn,
-                                         desc->rtnevents)) != APR_SUCCESS) {
+        status = serf__process_connection(conn, desc->rtnevents);
 
-            /* it's possible that the connection was already reset and thus the
-               socket cleaned up. */
-            if (conn->skt) {
-                tdesc.desc_type = APR_POLL_SOCKET;
-                tdesc.desc.s = conn->skt;
-                tdesc.reqevents = conn->reqevents;
-                ctx->pollset_rm(ctx->pollset_baton,
-                                &tdesc, &conn->baton);
-            }
-            return conn->status;
+        if (status) {
+            return status;
         }
     }
     else if (io->type == SERF_IO_LISTENER) {

Modified: serf/trunk/outgoing.c
URL: 
http://svn.apache.org/viewvc/serf/trunk/outgoing.c?rev=1714982&r1=1714981&r2=1714982&view=diff
==============================================================================
--- serf/trunk/outgoing.c (original)
+++ serf/trunk/outgoing.c Wed Nov 18 12:11:17 2015
@@ -676,8 +676,8 @@ static apr_status_t reset_connection(ser
 
     serf__connection_pre_cleanup(conn);
 
-    /* First, cancel all written requests for which we haven't received a 
-       response yet. Inform the application that the request is cancelled, 
+    /* First, cancel all written requests for which we haven't received a
+       response yet. Inform the application that the request is cancelled,
        so it can requeue them if needed. */
     while (conn->written_reqs) {
         serf__cancel_request(conn->written_reqs, &conn->written_reqs,
@@ -1013,7 +1013,7 @@ static apr_status_t write_to_connection(
 
         /* We try to limit the number of in-flight requests so that we
            don't have to repeat too many if the connection drops.
-           
+
            This check matches that in serf__conn_update_pollset()
            */
         if ((conn->probable_keepalive_limit &&
@@ -1394,8 +1394,8 @@ static apr_status_t hangup_connection(se
 }
 
 /* process all events on the connection */
-apr_status_t serf__process_connection(serf_connection_t *conn,
-                                      apr_int16_t events)
+static apr_status_t process_connection(serf_connection_t *conn,
+                                       apr_int16_t events)
 {
     apr_status_t status;
 #ifdef SERF_DEBUG_BUCKET_USE
@@ -1462,7 +1462,7 @@ apr_status_t serf__process_connection(se
                     status = APR_FROM_OS_ERROR(error);
 
                     /* Handle fallback for multi-homed servers.
-                     
+
                        ### Improve algorithm to find better than just 'next'?
 
                        Current Windows versions already handle re-ordering for
@@ -1503,6 +1503,47 @@ apr_status_t serf__process_connection(se
     return APR_SUCCESS;
 }
 
+apr_status_t serf__process_connection(serf_connection_t *conn,
+                                      apr_int16_t events)
+{
+    serf_context_t *ctx = conn->ctx;
+    apr_pollfd_t tdesc = { 0 };
+
+    /* If this connection has already failed, return the error again, and try
+    * to remove it from the pollset again
+    */
+    if (conn->status) {
+        tdesc.desc_type = APR_POLL_SOCKET;
+        tdesc.desc.s = conn->skt;
+        tdesc.reqevents = conn->reqevents;
+        ctx->pollset_rm(ctx->pollset_baton,
+                        &tdesc, &conn->baton);
+        return conn->status;
+    }
+    /* apr_pollset_poll() can return a conn multiple times... */
+    if ((conn->seen_in_pollset & events) != 0 ||
+        (conn->seen_in_pollset & APR_POLLHUP) != 0) {
+        return APR_SUCCESS;
+    }
+
+    conn->seen_in_pollset |= events;
+
+    if ((conn->status = process_connection(conn, events)) != APR_SUCCESS)
+    {
+        /* it's possible that the connection was already reset and thus the
+        socket cleaned up. */
+        if (conn->skt) {
+            tdesc.desc_type = APR_POLL_SOCKET;
+            tdesc.desc.s = conn->skt;
+            tdesc.reqevents = conn->reqevents;
+            ctx->pollset_rm(ctx->pollset_baton,
+                            &tdesc, &conn->baton);
+        }
+        return conn->status;
+    }
+    return APR_SUCCESS;
+}
+
 serf_connection_t *serf_connection_create(
     serf_context_t *ctx,
     apr_sockaddr_t *address,
@@ -1717,7 +1758,7 @@ void serf_connection_set_max_outstanding
     conn->max_outstanding_requests = max_requests;
 }
 
-/* Disable HTTP pipelining, ensure that only one request is outstanding at a 
+/* Disable HTTP pipelining, ensure that only one request is outstanding at a
    time. This is an internal method, an application that wants to disable
    HTTP pipelining can achieve this by calling:
      serf_connection_set_max_outstanding_requests(conn, 1) .


Reply via email to