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

Side by Side Diff: ipc/ipc_sync_channel_unittest.cc

Issue 339008: Suppress a data race on vfptr in ipc/ipc_sync_channel_unittest.cc... (Closed) Base URL: svn://svn.chromium.org/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
« no previous file with comments | « no previous file | tools/valgrind/tsan/suppressions.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // Unit test for SyncChannel. 5 // Unit test for SyncChannel.
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/dynamic_annotations.h"
11 #include "base/logging.h" 12 #include "base/logging.h"
12 #include "base/message_loop.h" 13 #include "base/message_loop.h"
13 #include "base/platform_thread.h" 14 #include "base/platform_thread.h"
14 #include "base/stl_util-inl.h" 15 #include "base/stl_util-inl.h"
15 #include "base/string_util.h" 16 #include "base/string_util.h"
16 #include "base/thread.h" 17 #include "base/thread.h"
17 #include "base/waitable_event.h" 18 #include "base/waitable_event.h"
18 #include "ipc/ipc_message.h" 19 #include "ipc/ipc_message.h"
19 #include "ipc/ipc_sync_channel.h" 20 #include "ipc/ipc_sync_channel.h"
20 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 11 matching lines...) Expand all
32 class Worker : public Channel::Listener, public Message::Sender { 33 class Worker : public Channel::Listener, public Message::Sender {
33 public: 34 public:
34 // Will create a channel without a name. 35 // Will create a channel without a name.
35 Worker(Channel::Mode mode, const std::string& thread_name) 36 Worker(Channel::Mode mode, const std::string& thread_name)
36 : done_(new WaitableEvent(false, false)), 37 : done_(new WaitableEvent(false, false)),
37 channel_created_(new WaitableEvent(false, false)), 38 channel_created_(new WaitableEvent(false, false)),
38 mode_(mode), 39 mode_(mode),
39 ipc_thread_((thread_name + "_ipc").c_str()), 40 ipc_thread_((thread_name + "_ipc").c_str()),
40 listener_thread_((thread_name + "_listener").c_str()), 41 listener_thread_((thread_name + "_listener").c_str()),
41 overrided_thread_(NULL), 42 overrided_thread_(NULL),
42 shutdown_event_(true, false) { } 43 shutdown_event_(true, false) {
44 // The data race on vfptr is real but is very hard
45 // to suppress using standard Valgrind mechanism (suppressions).
46 // We have to use ANNOTATE_BENIGN_RACE to hide the reports and
47 // make ThreadSanitizer bots green.
48 ANNOTATE_BENIGN_RACE(this, "Race on vfptr, http://crbug.com/25841");
49 }
43 50
44 // Will create a named channel and use this name for the threads' name. 51 // Will create a named channel and use this name for the threads' name.
45 Worker(const std::string& channel_name, Channel::Mode mode) 52 Worker(const std::string& channel_name, Channel::Mode mode)
46 : done_(new WaitableEvent(false, false)), 53 : done_(new WaitableEvent(false, false)),
47 channel_created_(new WaitableEvent(false, false)), 54 channel_created_(new WaitableEvent(false, false)),
48 channel_name_(channel_name), 55 channel_name_(channel_name),
49 mode_(mode), 56 mode_(mode),
50 ipc_thread_((channel_name + "_ipc").c_str()), 57 ipc_thread_((channel_name + "_ipc").c_str()),
51 listener_thread_((channel_name + "_listener").c_str()), 58 listener_thread_((channel_name + "_listener").c_str()),
52 overrided_thread_(NULL), 59 overrided_thread_(NULL),
53 shutdown_event_(true, false) { } 60 shutdown_event_(true, false) {
61 // The data race on vfptr is real but is very hard
62 // to suppress using standard Valgrind mechanism (suppressions).
63 // We have to use ANNOTATE_BENIGN_RACE to hide the reports and
64 // make ThreadSanitizer bots green.
65 ANNOTATE_BENIGN_RACE(this, "Race on vfptr, http://crbug.com/25841");
66 }
54 67
55 // The IPC thread needs to outlive SyncChannel, so force the correct order of 68 // The IPC thread needs to outlive SyncChannel, so force the correct order of
56 // destruction. 69 // destruction.
57 virtual ~Worker() { 70 virtual ~Worker() {
58 WaitableEvent listener_done(false, false), ipc_done(false, false); 71 WaitableEvent listener_done(false, false), ipc_done(false, false);
59 ListenerThread()->message_loop()->PostTask(FROM_HERE, NewRunnableMethod( 72 ListenerThread()->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
60 this, &Worker::OnListenerThreadShutdown1, &listener_done, 73 this, &Worker::OnListenerThreadShutdown1, &listener_done,
61 &ipc_done)); 74 &ipc_done));
62 listener_done.Wait(); 75 listener_done.Wait();
63 ipc_done.Wait(); 76 ipc_done.Wait();
(...skipping 944 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 1021
1009 // Tests http://b/1474092 - that if after the done_event is set but before 1022 // Tests http://b/1474092 - that if after the done_event is set but before
1010 // OnObjectSignaled is called another message is sent out, then after its 1023 // OnObjectSignaled is called another message is sent out, then after its
1011 // reply comes back OnObjectSignaled will be called for the first message. 1024 // reply comes back OnObjectSignaled will be called for the first message.
1012 TEST_F(IPCSyncChannelTest, DoneEventRace) { 1025 TEST_F(IPCSyncChannelTest, DoneEventRace) {
1013 std::vector<Worker*> workers; 1026 std::vector<Worker*> workers;
1014 workers.push_back(new DoneEventRaceServer()); 1027 workers.push_back(new DoneEventRaceServer());
1015 workers.push_back(new SimpleClient()); 1028 workers.push_back(new SimpleClient());
1016 RunTest(workers); 1029 RunTest(workers);
1017 } 1030 }
OLDNEW
« no previous file with comments | « no previous file | tools/valgrind/tsan/suppressions.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698