From d7d4ef405675c4ee2bd3466523ced74e68d392b8 Mon Sep 17 00:00:00 2001 From: scw00 Date: Sat, 21 Oct 2017 08:44:36 +0800 Subject: [PATCH] fix #2677: Issue with null ua_buffer_reader due to PR #2123 --- proxy/http/HttpTunnel.cc | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/proxy/http/HttpTunnel.cc b/proxy/http/HttpTunnel.cc index a5caec04d7b..6b37b1d8c47 100644 --- a/proxy/http/HttpTunnel.cc +++ b/proxy/http/HttpTunnel.cc @@ -563,8 +563,8 @@ HttpTunnel::kill_tunnel() ink_assert(producer.alive == false); } active = false; - this->deallocate_redirect_postdata_buffers(); this->deallocate_buffers(); + this->deallocate_redirect_postdata_buffers(); this->reset(); } @@ -604,9 +604,6 @@ HttpTunnel::deallocate_buffers() for (auto &producer : producers) { if (producer.read_buffer != nullptr) { ink_assert(producer.vc != nullptr); - if (postbuf && postbuf->ua_buffer_reader && postbuf->ua_buffer_reader->mbuf == producer.read_buffer) { - postbuf->ua_buffer_reader = nullptr; - } free_MIOBuffer(producer.read_buffer); producer.read_buffer = nullptr; producer.buffer_start = nullptr; @@ -701,6 +698,7 @@ HttpTunnel::add_producer(VConnection *vc, int64_t nbytes_arg, IOBufferReader *re ink_assert(p->ntodo == 0); p->alive = false; p->read_success = true; + Debug("http_redirect", "Add static producer, there is %lu in Buffer", reader_start->read_avail()); } else { p->alive = true; } @@ -973,6 +971,7 @@ HttpTunnel::producer_run(HttpTunnelProducer *p) Debug("http_redirect", "[HttpTunnel::producer_handler] post exceeds buffer limit, buffer_avail=%" PRId64 " limit=%" PRId64 "", p->buffer_start->read_avail(), HttpConfig::m_master.post_copy_size); sm->enable_redirection = false; + deallocate_redirect_postdata_buffers(); } else { // allocate post buffers with a new reader. The reader will be freed when p->read_buffer is freed allocate_redirect_postdata_buffers(p->read_buffer->clone_reader(p->buffer_start)); @@ -1186,8 +1185,8 @@ HttpTunnel::producer_handler(int event, HttpTunnelProducer *p) } } // end of added logic for partial copy of POST - Debug("http_redirect", "[HttpTunnel::producer_handler] enable_redirection: [%d %d %d] event: %d", p->alive == true, - sm->enable_redirection, (p->self_consumer && p->self_consumer->alive == true), event); + Debug("http_redirect", "[HttpTunnel::producer_handler] enable_redirection: [%d %d %d %d] event: %d", p->alive == true, + sm->enable_redirection, (p->self_consumer && p->self_consumer->alive == true), sm->redirection_tries, event); switch (event) { case VC_EVENT_READ_READY: