summaryrefslogtreecommitdiffstats
path: root/net/tools
diff options
context:
space:
mode:
authormbelshe@chromium.org <mbelshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-28 21:27:49 +0000
committermbelshe@chromium.org <mbelshe@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-28 21:27:49 +0000
commitce9cb76ebf7d09deeee3aed94433ea3743eb9d9b (patch)
tree531bdfd098eb7c88bdb3948bba7acfe1e1a5f8a9 /net/tools
parent1e72daa1a67e0e1105e6e31a949e2628ab88eb34 (diff)
downloadchromium_src-ce9cb76ebf7d09deeee3aed94433ea3743eb9d9b.zip
chromium_src-ce9cb76ebf7d09deeee3aed94433ea3743eb9d9b.tar.gz
chromium_src-ce9cb76ebf7d09deeee3aed94433ea3743eb9d9b.tar.bz2
Fix a memory leak when cleaning the queued data frames.
BUG=none TEST=none Review URL: http://codereview.chromium.org/6298021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@73024 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/tools')
-rw-r--r--net/tools/flip_server/flip_in_mem_edsm_server.cc60
1 files changed, 19 insertions, 41 deletions
diff --git a/net/tools/flip_server/flip_in_mem_edsm_server.cc b/net/tools/flip_server/flip_in_mem_edsm_server.cc
index 4fc963a..5b7e15a 100644
--- a/net/tools/flip_server/flip_in_mem_edsm_server.cc
+++ b/net/tools/flip_server/flip_in_mem_edsm_server.cc
@@ -295,24 +295,25 @@ class DataFrame {
bool delete_when_done;
size_t index;
DataFrame() : data(NULL), size(0), delete_when_done(false), index(0) {}
- virtual void MaybeDelete() {
- if (delete_when_done) {
- delete[] data;
- }
- }
virtual ~DataFrame() {
- MaybeDelete();
+ if (delete_when_done)
+ delete[] data;
}
};
class SpdyFrameDataFrame : public DataFrame {
public:
- SpdyFrame* frame;
- virtual void MaybeDelete() {
- if (delete_when_done) {
- delete frame;
- }
+ SpdyFrameDataFrame(SpdyFrame* spdy_frame)
+ : frame(spdy_frame) {
+ data = spdy_frame->data();
+ size = spdy_frame->length() + SpdyFrame::size();
+ }
+
+ virtual ~SpdyFrameDataFrame() {
+ delete frame;
}
+
+ const SpdyFrame* frame;
};
////////////////////////////////////////////////////////////////////////////////
@@ -1973,12 +1974,7 @@ class SpdySM : public SpdyFramerVisitorInterface, public SMInterface {
spdy_framer_->CreateSettings(settings);
VLOG(1) << ACCEPTOR_CLIENT_IDENT << "Sending Settings Frame";
- SpdyFrameDataFrame* df = new SpdyFrameDataFrame;
- df->size = settings_frame->length() + SpdyFrame::size();
- df->data = settings_frame->data();
- df->frame = settings_frame;
- df->delete_when_done = true;
- EnqueueDataFrame(df);
+ EnqueueDataFrame(new SpdyFrameDataFrame(settings_frame));
return 1;
}
@@ -2125,13 +2121,8 @@ class SpdySM : public SpdyFramerVisitorInterface, public SMInterface {
SpdySynStreamControlFrame* fsrcf =
spdy_framer_->CreateSynStream(stream_id, 0, 0, CONTROL_FLAG_NONE, true,
&block);
- SpdyFrameDataFrame* df = new SpdyFrameDataFrame;
- df->size = fsrcf->length() + SpdyFrame::size();
- size_t df_size = df->size;
- df->data = fsrcf->data();
- df->frame = fsrcf;
- df->delete_when_done = true;
- EnqueueDataFrame(df);
+ size_t df_size = fsrcf->length() + SpdyFrame::size();
+ EnqueueDataFrame(new SpdyFrameDataFrame(fsrcf));
VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Sending SynStreamheader "
<< stream_id;
@@ -2147,13 +2138,8 @@ class SpdySM : public SpdyFramerVisitorInterface, public SMInterface {
SpdySynReplyControlFrame* fsrcf =
spdy_framer_->CreateSynReply(stream_id, CONTROL_FLAG_NONE, true, &block);
- SpdyFrameDataFrame* df = new SpdyFrameDataFrame;
- df->size = fsrcf->length() + SpdyFrame::size();
- size_t df_size = df->size;
- df->data = fsrcf->data();
- df->frame = fsrcf;
- df->delete_when_done = true;
- EnqueueDataFrame(df);
+ size_t df_size = fsrcf->length() + SpdyFrame::size();
+ EnqueueDataFrame(new SpdyFrameDataFrame(fsrcf));
VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Sending SynReplyheader "
<< stream_id;
@@ -2172,11 +2158,7 @@ class SpdySM : public SpdyFramerVisitorInterface, public SMInterface {
if (len == 0) {
SpdyDataFrame* fdf = spdy_framer_->CreateDataFrame(stream_id, data, len,
flags);
- SpdyFrameDataFrame* df = new SpdyFrameDataFrame;
- df->size = fdf->length() + SpdyFrame::size();
- df->data = fdf->data();
- df->delete_when_done = true;
- EnqueueDataFrame(df);
+ EnqueueDataFrame(new SpdyFrameDataFrame(fdf));
return;
}
@@ -2193,11 +2175,7 @@ class SpdySM : public SpdyFramerVisitorInterface, public SMInterface {
SpdyDataFrame* fdf = spdy_framer_->CreateDataFrame(stream_id, data, size,
chunk_flags);
- SpdyFrameDataFrame* df = new SpdyFrameDataFrame;
- df->size = fdf->length() + SpdyFrame::size();
- df->data = fdf->data();
- df->delete_when_done = true;
- EnqueueDataFrame(df);
+ EnqueueDataFrame(new SpdyFrameDataFrame(fdf));
VLOG(2) << ACCEPTOR_CLIENT_IDENT << "SpdySM: Sending data frame "
<< stream_id << " [" << size << "] shrunk to " << fdf->length()