Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // See header file for description of DnsQueue class | 5 // See header file for description of DnsQueue class |
| 6 | 6 |
| 7 #include "chrome/renderer/net/predictor_queue.h" | 7 #include "chrome/renderer/net/predictor_queue.h" |
| 8 | 8 |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "base/metrics/stats_counters.h" | 10 #include "base/metrics/stats_counters.h" |
| 11 | 11 |
| 12 DnsQueue::DnsQueue(BufferSize size) | 12 DnsQueue::DnsQueue(BufferSize size) |
| 13 : buffer_(new char[size + 2]), | 13 : buffer_(new char[size + 2]), |
| 14 buffer_size_(size + 1), | 14 buffer_size_(size + 1), |
| 15 buffer_sentinel_(size + 1), | 15 buffer_sentinel_(size + 1), |
| 16 size_(0) { | 16 size_(0) { |
| 17 CHECK(0 < static_cast<BufferSize>(size + 3)); // Avoid overflow worries. | 17 CHECK(0 < static_cast<BufferSize>(size + 3)); // Avoid overflow worries. |
| 18 buffer_[buffer_sentinel_] = '\0'; // Guard byte to help reading data. | 18 buffer_[buffer_sentinel_] = '\0'; // Guard byte to help reading data. |
| 19 readable_ = writeable_ = 0; // Buffer starts empty. | 19 readable_ = writeable_ = 0; // Buffer starts empty. |
| 20 } | 20 } |
| 21 | 21 |
| 22 DnsQueue::~DnsQueue(void) { | 22 DnsQueue::~DnsQueue(void) { |
| 23 } | 23 } |
| 24 | 24 |
| 25 void DnsQueue::Clear() { | |
| 26 size_ = 0; | |
| 27 readable_ = writeable_; | |
| 28 DCHECK(Validate()); | |
|
Lei Zhang
2011/03/11 01:09:35
never put calls with side effects inside a DCHECK.
Sheridan Rawlins
2011/03/11 01:39:49
Validate is used in DCHECK elsewhere in the code (
| |
| 29 } | |
| 30 | |
| 25 // Push takes an unterminated string plus its length. | 31 // Push takes an unterminated string plus its length. |
| 26 // The string must not contain a null terminator. | 32 // The string must not contain a null terminator. |
| 27 // Exactly length chars are written, or nothing is written. | 33 // Exactly length chars are written, or nothing is written. |
| 28 // Returns true for success, false there was no room to push. | 34 // Returns true for success, false there was no room to push. |
| 29 DnsQueue::PushResult DnsQueue::Push(const char* source, | 35 DnsQueue::PushResult DnsQueue::Push(const char* source, |
| 30 const size_t unsigned_length) { | 36 const size_t unsigned_length) { |
| 31 BufferSize length = static_cast<BufferSize>(unsigned_length); | 37 BufferSize length = static_cast<BufferSize>(unsigned_length); |
| 32 if (0 > length+1) // Avoid overflows in conversion to signed. | 38 if (0 > length+1) // Avoid overflows in conversion to signed. |
| 33 return OVERFLOW_PUSH; | 39 return OVERFLOW_PUSH; |
| 34 | 40 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 137 } | 143 } |
| 138 | 144 |
| 139 bool DnsQueue::Validate() { | 145 bool DnsQueue::Validate() { |
| 140 return (readable_ >= 0) && | 146 return (readable_ >= 0) && |
| 141 readable_ < buffer_sentinel_ && | 147 readable_ < buffer_sentinel_ && |
| 142 writeable_ >= 0 && | 148 writeable_ >= 0 && |
| 143 writeable_ < buffer_sentinel_ && | 149 writeable_ < buffer_sentinel_ && |
| 144 '\0' == buffer_[buffer_sentinel_] && | 150 '\0' == buffer_[buffer_sentinel_] && |
| 145 ((0 == size_) == (readable_ == writeable_)); | 151 ((0 == size_) == (readable_ == writeable_)); |
| 146 } | 152 } |
| OLD | NEW |