@@ -1092,6 +1092,9 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1092
1092
// we can keep it.
1093
1093
bodyWriter .cancel ()
1094
1094
cs .abortRequestBodyWrite (errStopReqBodyWrite )
1095
+ if hasBody && ! bodyWritten {
1096
+ <- bodyWriter .resc
1097
+ }
1095
1098
}
1096
1099
if re .err != nil {
1097
1100
cc .forgetStreamID (cs .ID )
@@ -1112,6 +1115,7 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1112
1115
} else {
1113
1116
bodyWriter .cancel ()
1114
1117
cs .abortRequestBodyWrite (errStopReqBodyWriteAndCancel )
1118
+ <- bodyWriter .resc
1115
1119
}
1116
1120
cc .forgetStreamID (cs .ID )
1117
1121
return nil , cs .getStartedWrite (), errTimeout
@@ -1121,6 +1125,7 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1121
1125
} else {
1122
1126
bodyWriter .cancel ()
1123
1127
cs .abortRequestBodyWrite (errStopReqBodyWriteAndCancel )
1128
+ <- bodyWriter .resc
1124
1129
}
1125
1130
cc .forgetStreamID (cs .ID )
1126
1131
return nil , cs .getStartedWrite (), ctx .Err ()
@@ -1130,6 +1135,7 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1130
1135
} else {
1131
1136
bodyWriter .cancel ()
1132
1137
cs .abortRequestBodyWrite (errStopReqBodyWriteAndCancel )
1138
+ <- bodyWriter .resc
1133
1139
}
1134
1140
cc .forgetStreamID (cs .ID )
1135
1141
return nil , cs .getStartedWrite (), errRequestCanceled
@@ -1139,6 +1145,7 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1139
1145
// forgetStreamID.
1140
1146
return nil , cs .getStartedWrite (), cs .resetErr
1141
1147
case err := <- bodyWriter .resc :
1148
+ bodyWritten = true
1142
1149
// Prefer the read loop's response, if available. Issue 16102.
1143
1150
select {
1144
1151
case re := <- readLoopResCh :
@@ -1149,7 +1156,6 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1149
1156
cc .forgetStreamID (cs .ID )
1150
1157
return nil , cs .getStartedWrite (), err
1151
1158
}
1152
- bodyWritten = true
1153
1159
if d := cc .responseHeaderTimeout (); d != 0 {
1154
1160
timer := time .NewTimer (d )
1155
1161
defer timer .Stop ()
0 commit comments