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

Side by Side Diff: content/child/shared_memory_data_consumer_handle.cc

Issue 2799223002: Add CHECKs to investigate crashes in BytesConsumerForDataConsumerHandle (Closed)
Patch Set: fix Created 3 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/child/shared_memory_data_consumer_handle.h" 5 #include "content/child/shared_memory_data_consumer_handle.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <deque> 8 #include <deque>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 Result result() const { 101 Result result() const {
102 lock_.AssertAcquired(); 102 lock_.AssertAcquired();
103 return result_; 103 return result_;
104 } 104 }
105 void set_result(Result r) { 105 void set_result(Result r) {
106 lock_.AssertAcquired(); 106 lock_.AssertAcquired();
107 result_ = r; 107 result_ = r;
108 } 108 }
109 void AcquireReaderLock(Client* client) { 109 void AcquireReaderLock(Client* client) {
110 lock_.AssertAcquired(); 110 lock_.AssertAcquired();
111 DCHECK(!notification_task_runner_); 111 // TODO(yhirano): Turn these CHECKs to DCHECKs once the crash is fixed.
112 DCHECK(!client_); 112 CHECK(!notification_task_runner_);
113 CHECK(!client_);
113 notification_task_runner_ = base::ThreadTaskRunnerHandle::Get(); 114 notification_task_runner_ = base::ThreadTaskRunnerHandle::Get();
114 client_ = client; 115 client_ = client;
115 if (client && !(IsEmpty() && result() == Ok)) { 116 if (client && !(IsEmpty() && result() == Ok)) {
116 // We cannot notify synchronously because the user doesn't have the reader 117 // We cannot notify synchronously because the user doesn't have the reader
117 // yet. 118 // yet.
118 notification_task_runner_->PostTask( 119 notification_task_runner_->PostTask(
119 FROM_HERE, base::Bind(&Context::NotifyInternal, this, false)); 120 FROM_HERE, base::Bind(&Context::NotifyInternal, this, false));
120 } 121 }
121 } 122 }
122 void ReleaseReaderLock() { 123 void ReleaseReaderLock() {
123 lock_.AssertAcquired(); 124 lock_.AssertAcquired();
124 DCHECK(notification_task_runner_); 125 // TODO(yhirano): Turn these CHECKs to DCHECKs once the crash is fixed.
126 CHECK(notification_task_runner_);
127 CHECK(notification_task_runner_->BelongsToCurrentThread());
125 notification_task_runner_ = nullptr; 128 notification_task_runner_ = nullptr;
126 client_ = nullptr; 129 client_ = nullptr;
127 } 130 }
128 void PostNotify() { 131 void PostNotify() {
129 lock_.AssertAcquired(); 132 lock_.AssertAcquired();
130 auto runner = notification_task_runner_; 133 auto runner = notification_task_runner_;
131 if (!runner) 134 if (!runner)
132 return; 135 return;
133 // We don't re-post the task when the runner changes while waiting for 136 // We don't re-post the task when the runner changes while waiting for
134 // this task because in this case a new reader is obtained and 137 // this task because in this case a new reader is obtained and
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 // We don't re-post the task when the runner changes while waiting for 219 // We don't re-post the task when the runner changes while waiting for
217 // this task because in this case a new reader is obtained and 220 // this task because in this case a new reader is obtained and
218 // notification is already done at the reader creation time if necessary. 221 // notification is already done at the reader creation time if necessary.
219 runner->PostTask(FROM_HERE, 222 runner->PostTask(FROM_HERE,
220 base::Bind(&Context::NotifyInternal, this, false)); 223 base::Bind(&Context::NotifyInternal, this, false));
221 } 224 }
222 } 225 }
223 void Clear() { 226 void Clear() {
224 lock_.AssertAcquired(); 227 lock_.AssertAcquired();
225 ClearQueue(); 228 ClearQueue();
226 client_ = nullptr; 229 // Turn this CHECK to DCHECK.
230 CHECK(!client_);
227 ResetOnReaderDetached(); 231 ResetOnReaderDetached();
228 } 232 }
229 // Must be called with |lock_| not aquired. 233 // Must be called with |lock_| not aquired.
230 void ResetOnReaderDetachedWithLock() { 234 void ResetOnReaderDetachedWithLock() {
231 base::AutoLock lock(lock_); 235 base::AutoLock lock(lock_);
232 ResetOnReaderDetached(); 236 ResetOnReaderDetached();
233 } 237 }
234 238
235 friend class base::RefCountedThreadSafe<Context>; 239 friend class base::RefCountedThreadSafe<Context>;
236 ~Context() = default; 240 ~Context() = default;
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 std::unique_ptr<blink::WebDataConsumerHandle::Reader> 455 std::unique_ptr<blink::WebDataConsumerHandle::Reader>
452 SharedMemoryDataConsumerHandle::obtainReader(Client* client) { 456 SharedMemoryDataConsumerHandle::obtainReader(Client* client) {
453 return base::WrapUnique(new ReaderImpl(context_, client)); 457 return base::WrapUnique(new ReaderImpl(context_, client));
454 } 458 }
455 459
456 const char* SharedMemoryDataConsumerHandle::debugName() const { 460 const char* SharedMemoryDataConsumerHandle::debugName() const {
457 return "SharedMemoryDataConsumerHandle"; 461 return "SharedMemoryDataConsumerHandle";
458 } 462 }
459 463
460 } // namespace content 464 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698