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

Side by Side Diff: mojo/edk/system/raw_channel.cc

Issue 1492943005: Remove ShutdownIPCSupportAndWaitForNoChannels. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "mojo/edk/system/raw_channel.h" 5 #include "mojo/edk/system/raw_channel.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 LazyInitialize(); 214 LazyInitialize();
215 } 215 }
216 216
217 void RawChannel::LazyInitialize() { 217 void RawChannel::LazyInitialize() {
218 read_lock_.AssertAcquired(); 218 read_lock_.AssertAcquired();
219 write_lock_.AssertAcquired(); 219 write_lock_.AssertAcquired();
220 DCHECK(internal::g_io_thread_task_runner->RunsTasksOnCurrentThread()); 220 DCHECK(internal::g_io_thread_task_runner->RunsTasksOnCurrentThread());
221 if (initialized_) 221 if (initialized_)
222 return; 222 return;
223 initialized_ = true; 223 initialized_ = true;
224 internal::ChannelStarted();
225 base::MessageLoop::current()->AddDestructionObserver(this); 224 base::MessageLoop::current()->AddDestructionObserver(this);
226 225
227 OnInit(); 226 OnInit();
228 227
229 if (read_buffer_->num_valid_bytes_) { 228 if (read_buffer_->num_valid_bytes_) {
230 // We had serialized read buffer data through SetSerializedData call. 229 // We had serialized read buffer data through SetSerializedData call.
231 // Make sure we read messages out of it now, otherwise the delegate won't 230 // Make sure we read messages out of it now, otherwise the delegate won't
232 // get notified if no other data gets written to the pipe. 231 // get notified if no other data gets written to the pipe.
233 // Although this means that we can call back synchronously into the caller, 232 // Although this means that we can call back synchronously into the caller,
234 // that's easier than posting a task to do this. That is because if we post 233 // that's easier than posting a task to do this. That is because if we post
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 // 2) we have a read or write error before (doesn't matter which), or 3) when 280 // 2) we have a read or write error before (doesn't matter which), or 3) when
282 // there are no pending messages to be written. 281 // there are no pending messages to be written.
283 if (!IsHandleValid() || error_occurred_ || empty) { 282 if (!IsHandleValid() || error_occurred_ || empty) {
284 { 283 {
285 base::AutoLock read_locker(read_lock_); 284 base::AutoLock read_locker(read_lock_);
286 base::AutoLock locker(write_lock_); 285 base::AutoLock locker(write_lock_);
287 OnShutdownNoLock(read_buffer_.Pass(), write_buffer_.Pass()); 286 OnShutdownNoLock(read_buffer_.Pass(), write_buffer_.Pass());
288 } 287 }
289 288
290 if (initialized_) { 289 if (initialized_) {
291 internal::ChannelShutdown();
292 base::MessageLoop::current()->RemoveDestructionObserver(this); 290 base::MessageLoop::current()->RemoveDestructionObserver(this);
293 } 291 }
294 delete this; 292 delete this;
295 return; 293 return;
296 } 294 }
297 295
298 base::AutoLock read_locker(read_lock_); 296 base::AutoLock read_locker(read_lock_);
299 base::AutoLock locker(write_lock_); 297 base::AutoLock locker(write_lock_);
300 DCHECK(read_buffer_->IsEmpty()) << 298 DCHECK(read_buffer_->IsEmpty()) <<
301 "RawChannel::Shutdown called but there is pending data to be read"; 299 "RawChannel::Shutdown called but there is pending data to be read";
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 OnReadCompletedNoLock(io_result, bytes_read); 720 OnReadCompletedNoLock(io_result, bytes_read);
723 } 721 }
724 722
725 void RawChannel::WillDestroyCurrentMessageLoop() { 723 void RawChannel::WillDestroyCurrentMessageLoop() {
726 base::AutoLock locker(read_lock_); 724 base::AutoLock locker(read_lock_);
727 OnReadCompletedNoLock(IO_FAILED_SHUTDOWN, 0); 725 OnReadCompletedNoLock(IO_FAILED_SHUTDOWN, 0);
728 } 726 }
729 727
730 } // namespace edk 728 } // namespace edk
731 } // namespace mojo 729 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/multiprocess_message_pipe_unittest.cc ('k') | mojo/edk/system/raw_channel_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698