| Index: net/spdy/spdy_write_queue.cc
|
| diff --git a/net/spdy/spdy_write_queue.cc b/net/spdy/spdy_write_queue.cc
|
| index 18ddc39bf8ec28bef9e37e31025b39e5c9d46d07..c42b70b80ab4c295d8d7d80f6a0f4307309c22ab 100644
|
| --- a/net/spdy/spdy_write_queue.cc
|
| +++ b/net/spdy/spdy_write_queue.cc
|
| @@ -89,6 +89,25 @@ void SpdyWriteQueue::RemovePendingWritesForStream(
|
| queue->erase(out_it, queue->end());
|
| }
|
|
|
| +void SpdyWriteQueue::RemovePendingWritesForStreamsAfter(
|
| + SpdyStreamId last_good_stream_id) {
|
| + for (int i = 0; i < NUM_PRIORITIES; ++i) {
|
| + // Do the actual deletion and removal, preserving FIFO-ness.
|
| + std::deque<PendingWrite>* queue = &queue_[i];
|
| + std::deque<PendingWrite>::iterator out_it = queue->begin();
|
| + for (std::deque<PendingWrite>::const_iterator it = queue->begin();
|
| + it != queue->end(); ++it) {
|
| + if (it->stream->stream_id() > last_good_stream_id) {
|
| + delete it->frame_producer;
|
| + } else {
|
| + *out_it = *it;
|
| + ++out_it;
|
| + }
|
| + }
|
| + queue->erase(out_it, queue->end());
|
| + }
|
| +}
|
| +
|
| void SpdyWriteQueue::Clear() {
|
| for (int i = 0; i < NUM_PRIORITIES; ++i) {
|
| for (std::deque<PendingWrite>::iterator it = queue_[i].begin();
|
|
|