summaryrefslogtreecommitdiffstats
path: root/base/atomic_flag.cc
diff options
context:
space:
mode:
authortimurrrr@chromium.org <timurrrr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-16 13:09:11 +0000
committertimurrrr@chromium.org <timurrrr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-16 13:09:11 +0000
commit1c9cc40ac8ccaed63bda3770a16ed65ad2d0ee3c (patch)
tree6ea0cb0c3a08ddec22b8470d62ded7d97b2da921 /base/atomic_flag.cc
parent36b4f8050b8b5df172496236dccf5e9fa9814405 (diff)
downloadchromium_src-1c9cc40ac8ccaed63bda3770a16ed65ad2d0ee3c.zip
chromium_src-1c9cc40ac8ccaed63bda3770a16ed65ad2d0ee3c.tar.gz
chromium_src-1c9cc40ac8ccaed63bda3770a16ed65ad2d0ee3c.tar.bz2
Add AtomicFlag class to base/...
This class is intended to replace wrong synchronization via boolean like those in the bugs listed below. TEST=./sconsbuild/Debug/base_unittests --gtest_filter="*AtomicFlag*" BUG=21468,22520,24419 Review URL: http://codereview.chromium.org/276002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29265 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/atomic_flag.cc')
-rw-r--r--base/atomic_flag.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/base/atomic_flag.cc b/base/atomic_flag.cc
new file mode 100644
index 0000000..3e02543
--- /dev/null
+++ b/base/atomic_flag.cc
@@ -0,0 +1,28 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/atomic_flag.h"
+
+#include "base/dynamic_annotations.h"
+#include "base/logging.h"
+
+namespace base {
+
+void AtomicFlag::Set() {
+ DCHECK(!flag_);
+ // Set() method can't be called if the flag has already been set.
+
+ ANNOTATE_HAPPENS_BEFORE(&flag_);
+ base::subtle::Release_Store(&flag_, 1);
+}
+
+bool AtomicFlag::IsSet() const {
+ bool ret = base::subtle::Acquire_Load(&flag_) != 0;
+ if (ret) {
+ ANNOTATE_HAPPENS_AFTER(&flag_);
+ }
+ return ret;
+}
+
+} // namespace base