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

Unified Diff: chrome/common/ipc_channel_win.cc

Issue 19617: Add thread checks to the IPC channel.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 11 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 side-by-side diff with in-line comments
Download patch
« chrome/common/ipc_channel_win.h ('K') | « chrome/common/ipc_channel_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/ipc_channel_win.cc
===================================================================
--- chrome/common/ipc_channel_win.cc (revision 8590)
+++ chrome/common/ipc_channel_win.cc (working copy)
@@ -9,6 +9,7 @@
#include "base/compiler_specific.h"
#include "base/logging.h"
+#include "base/non_thread_safe.h"
#include "base/win_util.h"
#include "chrome/common/chrome_counters.h"
#include "chrome/common/ipc_logging.h"
@@ -46,6 +47,10 @@
}
void Channel::ChannelImpl::Close() {
+ if (thread_check_.get()) {
+ DCHECK(thread_check_->CalledOnValidThread());
+ }
+
bool waited = false;
if (input_state_.is_pending || output_state_.is_pending) {
CancelIo(pipe_);
@@ -77,6 +82,7 @@
}
bool Channel::ChannelImpl::Send(Message* message) {
+ DCHECK(thread_check_->CalledOnValidThread());
chrome::Counters::ipc_send_counter().Increment();
#ifdef IPC_MESSAGE_DEBUG_EXTRA
DLOG(INFO) << "sending message @" << message << " on channel @" << this
@@ -167,6 +173,9 @@
bool Channel::ChannelImpl::Connect() {
DLOG(WARNING) << "Connect called twice";
+ if (!thread_check_.get())
jam 2009/01/28 03:33:58 since this is only used in debug builds, it should
+ thread_check_.reset(new NonThreadSafe());
+
if (pipe_ == INVALID_HANDLE_VALUE)
return false;
@@ -190,6 +199,7 @@
}
bool Channel::ChannelImpl::ProcessConnection() {
+ DCHECK(thread_check_->CalledOnValidThread());
if (input_state_.is_pending)
input_state_.is_pending = false;
@@ -225,6 +235,7 @@
bool Channel::ChannelImpl::ProcessIncomingMessages(
MessageLoopForIO::IOContext* context,
DWORD bytes_read) {
+ DCHECK(thread_check_->CalledOnValidThread());
if (input_state_.is_pending) {
input_state_.is_pending = false;
DCHECK(context);
@@ -313,6 +324,7 @@
DWORD bytes_written) {
DCHECK(!waiting_connect_); // Why are we trying to send messages if there's
// no connection?
+ DCHECK(thread_check_->CalledOnValidThread());
if (output_state_.is_pending) {
DCHECK(context);
@@ -370,6 +382,7 @@
void Channel::ChannelImpl::OnIOCompleted(MessageLoopForIO::IOContext* context,
DWORD bytes_transfered, DWORD error) {
bool ok;
+ DCHECK(thread_check_->CalledOnValidThread());
if (context == &input_state_.context) {
if (waiting_connect_) {
if (!ProcessConnection())
« chrome/common/ipc_channel_win.h ('K') | « chrome/common/ipc_channel_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698