Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(620)

Unified Diff: net/spdy/spdy_write_queue.h

Issue 13009012: [SPDY] Refactor SpdySession's write queue (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix use-after-free (crbug.com/230259) Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_stream.cc ('k') | net/spdy/spdy_write_queue.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_write_queue.h
diff --git a/net/spdy/spdy_write_queue.h b/net/spdy/spdy_write_queue.h
new file mode 100644
index 0000000000000000000000000000000000000000..7f5451ad0b9891969cc96cef50422d266f5c2d59
--- /dev/null
+++ b/net/spdy/spdy_write_queue.h
@@ -0,0 +1,72 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef NET_SPDY_SPDY_WRITE_QUEUE_H_
+#define NET_SPDY_SPDY_WRITE_QUEUE_H_
+
+#include <deque>
+
+#include "base/basictypes.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "net/base/net_export.h"
+#include "net/base/request_priority.h"
+
+namespace net {
+
+class SpdyFrameProducer;
+class SpdyStream;
+
+// A queue of SpdyFrameProducers to produce frames to write. Ordered
+// by priority, and then FIFO.
+class NET_EXPORT_PRIVATE SpdyWriteQueue {
+ public:
+ SpdyWriteQueue();
+ ~SpdyWriteQueue();
+
+ // Enqueues the given frame producer at the given priority
+ // associated with the given stream, which may be NULL if the frame
+ // producer is not associated with a stream. If |stream| is
+ // non-NULL, its priority must be equal to |priority|.
+ void Enqueue(RequestPriority priority,
+ scoped_ptr<SpdyFrameProducer> frame_producer,
+ const scoped_refptr<SpdyStream>& stream);
+
+ // Dequeues the frame producer with the highest priority that was
+ // enqueued the earliest and its associated stream. Returns true and
+ // fills in |frame_producer| and |stream| if successful --
+ // otherwise, just returns false.
+ bool Dequeue(scoped_ptr<SpdyFrameProducer>* frame_producer,
+ scoped_refptr<SpdyStream>* stream);
+
+ // Removes all pending writes for the given stream, which must be
+ // non-NULL.
+ void RemovePendingWritesForStream(const scoped_refptr<SpdyStream>& stream);
+
+ // Removes all pending writes.
+ void Clear();
+
+ private:
+ // A struct holding a frame producer and its associated stream.
+ struct PendingWrite {
+ // This has to be a raw pointer since we store this in an STL
+ // container.
+ SpdyFrameProducer* frame_producer;
+ scoped_refptr<SpdyStream> stream;
+
+ PendingWrite();
+ PendingWrite(SpdyFrameProducer* frame_producer,
+ const scoped_refptr<SpdyStream>& stream);
+ ~PendingWrite();
+ };
+
+ // The actual write queue, binned by priority.
+ std::deque<PendingWrite> queue_[NUM_PRIORITIES];
+
+ DISALLOW_COPY_AND_ASSIGN(SpdyWriteQueue);
+};
+
+} // namespace net
+
+#endif // NET_SPDY_SPDY_WRITE_QUEUE_H_
« no previous file with comments | « net/spdy/spdy_stream.cc ('k') | net/spdy/spdy_write_queue.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698