prevent a leak of 'active streams' if client request has user error (#266)
This commit is contained in:
@@ -607,13 +607,21 @@ where
|
|||||||
|
|
||||||
let mut stream = me.store.insert(stream.id, stream);
|
let mut stream = me.store.insert(stream.id, stream);
|
||||||
|
|
||||||
me.actions.send.send_headers(
|
let sent = me.actions.send.send_headers(
|
||||||
headers,
|
headers,
|
||||||
send_buffer,
|
send_buffer,
|
||||||
&mut stream,
|
&mut stream,
|
||||||
&mut me.counts,
|
&mut me.counts,
|
||||||
&mut me.actions.task,
|
&mut me.actions.task,
|
||||||
)?;
|
);
|
||||||
|
|
||||||
|
// send_headers can return a UserError, if it does,
|
||||||
|
// we should forget about this stream.
|
||||||
|
if let Err(err) = sent {
|
||||||
|
stream.unlink();
|
||||||
|
stream.remove();
|
||||||
|
return Err(err.into());
|
||||||
|
}
|
||||||
|
|
||||||
// Given that the stream has been initialized, it should not be in the
|
// Given that the stream has been initialized, it should not be in the
|
||||||
// closed state.
|
// closed state.
|
||||||
|
|||||||
@@ -440,9 +440,14 @@ fn request_with_connection_headers() {
|
|||||||
let _ = ::env_logger::try_init();
|
let _ = ::env_logger::try_init();
|
||||||
let (io, srv) = mock::new();
|
let (io, srv) = mock::new();
|
||||||
|
|
||||||
let srv = srv.assert_client_handshake()
|
// can't assert full handshake, since client never sends a request, and
|
||||||
|
// thus never bothers to ack the settings...
|
||||||
|
let srv = srv.read_preface()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.recv_settings()
|
.recv_frame(frames::settings())
|
||||||
|
// goaway is required to make sure the connection closes because
|
||||||
|
// of no active streams
|
||||||
|
.recv_frame(frames::go_away(0))
|
||||||
.close();
|
.close();
|
||||||
|
|
||||||
let headers = vec![
|
let headers = vec![
|
||||||
|
|||||||
Reference in New Issue
Block a user