@@ -1148,6 +1148,9 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1148
1148
// we can keep it.
1149
1149
bodyWriter .cancel ()
1150
1150
cs .abortRequestBodyWrite (errStopReqBodyWrite )
1151
+ if hasBody && ! bodyWritten {
1152
+ <- bodyWriter .resc
1153
+ }
1151
1154
}
1152
1155
if re .err != nil {
1153
1156
cc .forgetStreamID (cs .ID )
@@ -1168,6 +1171,7 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1168
1171
} else {
1169
1172
bodyWriter .cancel ()
1170
1173
cs .abortRequestBodyWrite (errStopReqBodyWriteAndCancel )
1174
+ <- bodyWriter .resc
1171
1175
}
1172
1176
cc .forgetStreamID (cs .ID )
1173
1177
return nil , cs .getStartedWrite (), errTimeout
@@ -1177,6 +1181,7 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1177
1181
} else {
1178
1182
bodyWriter .cancel ()
1179
1183
cs .abortRequestBodyWrite (errStopReqBodyWriteAndCancel )
1184
+ <- bodyWriter .resc
1180
1185
}
1181
1186
cc .forgetStreamID (cs .ID )
1182
1187
return nil , cs .getStartedWrite (), ctx .Err ()
@@ -1186,6 +1191,7 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1186
1191
} else {
1187
1192
bodyWriter .cancel ()
1188
1193
cs .abortRequestBodyWrite (errStopReqBodyWriteAndCancel )
1194
+ <- bodyWriter .resc
1189
1195
}
1190
1196
cc .forgetStreamID (cs .ID )
1191
1197
return nil , cs .getStartedWrite (), errRequestCanceled
@@ -1195,6 +1201,7 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1195
1201
// forgetStreamID.
1196
1202
return nil , cs .getStartedWrite (), cs .resetErr
1197
1203
case err := <- bodyWriter .resc :
1204
+ bodyWritten = true
1198
1205
// Prefer the read loop's response, if available. Issue 16102.
1199
1206
select {
1200
1207
case re := <- readLoopResCh :
@@ -1205,7 +1212,6 @@ func (cc *ClientConn) roundTrip(req *http.Request) (res *http.Response, gotErrAf
1205
1212
cc .forgetStreamID (cs .ID )
1206
1213
return nil , cs .getStartedWrite (), err
1207
1214
}
1208
- bodyWritten = true
1209
1215
if d := cc .responseHeaderTimeout (); d != 0 {
1210
1216
timer := time .NewTimer (d )
1211
1217
defer timer .Stop ()
0 commit comments