]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
When Servlet container sends AJP body message with size 0, this means that Servlet...
authorMladen Turk <mturk@apache.org>
Sun, 29 Oct 2006 17:05:40 +0000 (17:05 +0000)
committerMladen Turk <mturk@apache.org>
Sun, 29 Oct 2006 17:05:40 +0000 (17:05 +0000)
Create flush bucket in that case.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@468941 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/mod_proxy_ajp.c

index bd06184187324ed7d5b7cc36f32dcaa83202bd42..4beae30b273ff967e9039b303d3ff6b1329a1557 100644 (file)
@@ -327,21 +327,30 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r,
                 /* AJP13_SEND_BODY_CHUNK: piece of data */
                 status = ajp_parse_data(r, conn->data, &size, &buff);
                 if (status == APR_SUCCESS) {
-                    e = apr_bucket_transient_create(buff, size,
-                                                    r->connection->bucket_alloc);
-                    APR_BRIGADE_INSERT_TAIL(output_brigade, e);
-
-                    if ( (conn->worker->flush_packets == flush_on) ||
-                         ( (conn->worker->flush_packets == flush_auto) &&
-                           (apr_poll(conn_poll, 1, &conn_poll_fd,
-                                     conn->worker->flush_wait)
-                             == APR_TIMEUP) ) ) {
+                    if (size == 0) {
+                        /* AJP13_SEND_BODY_CHUNK with zero length
+                         * is explicit flush message
+                         */
                         e = apr_bucket_flush_create(r->connection->bucket_alloc);
                         APR_BRIGADE_INSERT_TAIL(output_brigade, e);
                     }
-                    apr_brigade_length(output_brigade, 0, &bb_len);
-                    if (bb_len != -1)
-                        conn->worker->s->read += bb_len;
+                    else {
+                        e = apr_bucket_transient_create(buff, size,
+                                                    r->connection->bucket_alloc);
+                        APR_BRIGADE_INSERT_TAIL(output_brigade, e);
+
+                        if ((conn->worker->flush_packets == flush_on) ||
+                            ((conn->worker->flush_packets == flush_auto) &&
+                            (apr_poll(conn_poll, 1, &conn_poll_fd,
+                                      conn->worker->flush_wait)
+                                        == APR_TIMEUP) ) ) {
+                            e = apr_bucket_flush_create(r->connection->bucket_alloc);
+                            APR_BRIGADE_INSERT_TAIL(output_brigade, e);
+                        }
+                        apr_brigade_length(output_brigade, 0, &bb_len);
+                        if (bb_len != -1)
+                            conn->worker->s->read += bb_len;
+                    }
                     if (ap_pass_brigade(r->output_filters,
                                         output_brigade) != APR_SUCCESS) {
                         ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,