TS-2248 Segmentation fault HttpTunnel and throttling Reviews: amc and zwoop
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/40a49e31 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/40a49e31 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/40a49e31 Branch: refs/heads/5.0.x Commit: 40a49e312afe6846869fa3ce2808aaf4f6eb078f Parents: b36a7e1 Author: bettydramit <b13621367...@gmail.com> Authored: Sat Dec 28 13:53:46 2013 -0700 Committer: Leif Hedstrom <l...@ogre.com> Committed: Sat Dec 28 13:53:46 2013 -0700 ---------------------------------------------------------------------- proxy/http/HttpTunnel.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/40a49e31/proxy/http/HttpTunnel.cc ---------------------------------------------------------------------- diff --git a/proxy/http/HttpTunnel.cc b/proxy/http/HttpTunnel.cc index 4ba3b33..ca2f60c 100644 --- a/proxy/http/HttpTunnel.cc +++ b/proxy/http/HttpTunnel.cc @@ -1190,15 +1190,14 @@ HttpTunnel::consumer_reenable(HttpTunnelConsumer* c) // greater) to the target, we use strict comparison only for // checking low water, otherwise the flow control can stall out. uint64_t backlog = (flow_state.enabled_p && p->is_source()) - ? p->backlog(flow_state.high_water) - : 0; + ? p->backlog(flow_state.high_water) : 0; if (backlog >= flow_state.high_water) { if (is_debug_tag_set("http_tunnel")) Debug("http_tunnel", "Throttle %p %" PRId64 " / %" PRId64, p, backlog, p->backlog()); p->throttle(); // p becomes srcp for future calls to this method } else { - if (srcp && c->is_sink()) { + if (srcp && srcp->alive && c->is_sink()) { // Check if backlog is below low water - note we need to check // against the source producer, not necessarily the producer // for this consumer. We don't have to recompute the backlog