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..e3691e20320d27ba0755d5c34b77c4112d3fd058 100644 |
--- a/net/spdy/spdy_write_queue.cc |
+++ b/net/spdy/spdy_write_queue.cc |
@@ -89,6 +89,26 @@ 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 && (it->stream->stream_id() > last_good_stream_id || |
+ it->stream->stream_id() == 0)) { |
akalin
2013/04/18 19:58:19
ah, interesting. can you add to the header comment
Ryan Hamilton
2013/04/18 21:33:46
Done.
|
+ 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(); |