Roll src/third_party/WebKit d9c6159:8139f33 (svn 201974:201975)
[chromium-blink-merge.git] / net / disk_cache / blockfile / file_lock.cc
blobedd8d08628d8f3c7bc6c6f8973b35c9995206043
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "net/disk_cache/blockfile/file_lock.h"
7 #include "base/atomicops.h"
9 namespace {
11 void Barrier() {
12 #if !defined(COMPILER_MSVC)
13 // VS uses memory barrier semantics for volatiles.
14 base::subtle::MemoryBarrier();
15 #endif
18 } // namespace
20 namespace disk_cache {
22 FileLock::FileLock(BlockFileHeader* header) {
23 updating_ = &header->updating;
24 (*updating_)++;
25 Barrier();
26 acquired_ = true;
29 FileLock::~FileLock() {
30 Unlock();
33 void FileLock::Lock() {
34 if (acquired_)
35 return;
36 (*updating_)++;
37 Barrier();
40 void FileLock::Unlock() {
41 if (!acquired_)
42 return;
43 Barrier();
44 (*updating_)--;
47 } // namespace disk_cache