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

Side by Side Diff: net/base/io_buffer.cc

Issue 338049: Handle out of memory in GrowableIOBuffer more gracefully.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/base/io_buffer.h" 5 #include "net/base/io_buffer.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 8
9 namespace net { 9 namespace net {
10 10
11 IOBuffer::IOBuffer(int buffer_size) { 11 IOBuffer::IOBuffer(int buffer_size) {
12 DCHECK(buffer_size > 0); 12 DCHECK(buffer_size > 0);
13 data_ = new char[buffer_size]; 13 data_ = new char[buffer_size];
14 } 14 }
15 15
16 void DrainableIOBuffer::SetOffset(int bytes) { 16 void DrainableIOBuffer::SetOffset(int bytes) {
17 DCHECK(bytes >= 0 && bytes <= size_); 17 DCHECK(bytes >= 0 && bytes <= size_);
18 used_ = bytes; 18 used_ = bytes;
19 data_ = base_->data() + used_; 19 data_ = base_->data() + used_;
20 } 20 }
21 21
22 void GrowableIOBuffer::set_capacity(int capacity) { 22 bool GrowableIOBuffer::SetCapacity(int capacity) {
23 DCHECK_GE(capacity, 0); 23 DCHECK_GE(capacity, 0);
wtc 2009/11/09 22:37:23 Let's change this DCHECK to a CHECK.
24 real_data_.reset(static_cast<char*>(realloc(real_data_.release(), capacity))); 24 char* cur_buf = real_data_.release();
25 real_data_.reset(static_cast<char*>(realloc(cur_buf, capacity)));
26 if (real_data_.get() == NULL && capacity != 0) {
27 real_data_.reset(cur_buf);
28 return false;
29 }
25 capacity_ = capacity; 30 capacity_ = capacity;
26 CHECK(real_data_.get() != NULL || capacity == 0); 31 CHECK(real_data_.get() != NULL || capacity == 0);
wtc 2009/10/27 22:42:10 You can remove this CHECK now because its expressi
27 if (offset_ > capacity) 32 if (offset_ > capacity)
28 set_offset(capacity); 33 set_offset(capacity);
29 else 34 else
30 set_offset(offset_); // The pointer may have changed. 35 set_offset(offset_); // The pointer may have changed.
36 return true;
31 } 37 }
32 38
33 void GrowableIOBuffer::set_offset(int offset) { 39 void GrowableIOBuffer::set_offset(int offset) {
34 DCHECK(offset >= 0 && offset <= capacity_); 40 DCHECK(offset >= 0 && offset <= capacity_);
35 offset_ = offset; 41 offset_ = offset;
36 data_ = real_data_.get() + offset; 42 data_ = real_data_.get() + offset;
37 } 43 }
38 44
39 } // namespace net 45 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698