Commit 87299672 authored by Mladen Turk's avatar Mladen Turk
Browse files

Make sure that original socket timeout gets restored

even if the cping/cpong fails.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@452549 13f79535-47bb-0310-9956-ffa450edef68
parent 1fa73b1e
Loading
Loading
Loading
Loading
+11 −10
Changes for modules/proxy/ajp_utils.c: 11 added lines, 10 removed lines.
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ apr_status_t ajp_handle_cping_cpong(apr_socket_t *sock,
                                    apr_interval_time_t timeout)
{
    ajp_msg_t *msg;
    apr_status_t rc;
    apr_status_t rc, rv;
    apr_interval_time_t org;
    apr_byte_t result;

@@ -69,27 +69,28 @@ apr_status_t ajp_handle_cping_cpong(apr_socket_t *sock,
    ajp_msg_reuse(msg);

    /* Read CPONG reply */
    rc = ajp_ilink_receive(sock, msg);
    if (rc != APR_SUCCESS) {
    rv = ajp_ilink_receive(sock, msg);
    if (rv != APR_SUCCESS) {
        ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
               "ajp_handle_cping_cpong: ajp_ilink_receive failed");
        return rc;
        goto cleanup;
    }

    rc = ajp_msg_get_uint8(msg, &result);
    if (rc != APR_SUCCESS) {
    rv = ajp_msg_get_uint8(msg, &result);
    if (rv != APR_SUCCESS) {
        ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
               "ajp_handle_cping_cpong: invalid CPONG message");
        return rc;
        goto cleanup;
    }
    if (result != CMD_AJP13_CPONG) {
        ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
               "ajp_handle_cping_cpong: awaited CPONG, received %d ",
               result);
        return APR_EGENERAL;

        rv = APR_EGENERAL;
        goto cleanup;
    }

cleanup:
    /* Restore original socket timeout */
    rc = apr_socket_timeout_set(sock, org);
    if (rc != APR_SUCCESS) {
@@ -100,5 +101,5 @@ apr_status_t ajp_handle_cping_cpong(apr_socket_t *sock,

    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
                         "ajp_handle_cping_cpong: Done");
    return APR_SUCCESS;
    return rv;
}