Repository: trafficserver Updated Branches: refs/heads/master 4bb18a966 -> 77a852203
TS-2791: SPDY POST transactions failing with ERR_CLIENT_ABORT Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/77a85220 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/77a85220 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/77a85220 Branch: refs/heads/master Commit: 77a8522036b3aeefcea9a870d7cc62e2e7b0aeb3 Parents: 4bb18a9 Author: Sudheer Vinukonda <[email protected]> Authored: Thu May 15 09:50:15 2014 -0700 Committer: Bryan Call <[email protected]> Committed: Thu May 15 09:52:50 2014 -0700 ---------------------------------------------------------------------- proxy/FetchSM.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/77a85220/proxy/FetchSM.cc ---------------------------------------------------------------------- diff --git a/proxy/FetchSM.cc b/proxy/FetchSM.cc index 1ed73f5..dc2ef49 100644 --- a/proxy/FetchSM.cc +++ b/proxy/FetchSM.cc @@ -522,7 +522,11 @@ FetchSM::ext_lanuch() void FetchSM::ext_write_data(const void *data, size_t len) { - if (header_done && (fetch_flags & TS_FETCH_FLAGS_NEWLOCK)) { + bool writeReady = (header_done || + (req_method == TS_FETCH_METHOD_POST) || + (req_method == TS_FETCH_METHOD_PUT)); + + if (writeReady && (fetch_flags & TS_FETCH_FLAGS_NEWLOCK)) { MUTEX_TAKE_LOCK(mutex, this_ethread()); } @@ -532,10 +536,13 @@ FetchSM::ext_write_data(const void *data, size_t len) // Before header_done, FetchSM may not // be initialized. // - if (header_done) + if (writeReady) { + Debug(DEBUG_TAG, "[%s] re-enabling write_vio, header_done %u, req_method %u", __FUNCTION__, header_done, req_method); write_vio->reenable(); + fetch_handler(TS_EVENT_VCONN_WRITE_READY, write_vio); + } - if (header_done && (fetch_flags & TS_FETCH_FLAGS_NEWLOCK)) { + if (writeReady && (fetch_flags & TS_FETCH_FLAGS_NEWLOCK)) { MUTEX_UNTAKE_LOCK(mutex, this_ethread()); } }
