Home | History | Annotate | Download | only in blockfile
      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.
      4 
      5 #include "net/disk_cache/blockfile/file_lock.h"
      6 
      7 #include "base/atomicops.h"
      8 
      9 namespace {
     10 
     11 void Barrier() {
     12 #if !defined(COMPILER_MSVC)
     13   // VS uses memory barrier semantics for volatiles.
     14   base::subtle::MemoryBarrier();
     15 #endif
     16 }
     17 
     18 }  // namespace
     19 
     20 namespace disk_cache {
     21 
     22 FileLock::FileLock(BlockFileHeader* header) {
     23   updating_ = &header->updating;
     24   (*updating_)++;
     25   Barrier();
     26   acquired_ = true;
     27 }
     28 
     29 FileLock::~FileLock() {
     30   Unlock();
     31 }
     32 
     33 void FileLock::Lock() {
     34   if (acquired_)
     35     return;
     36   (*updating_)++;
     37   Barrier();
     38 }
     39 
     40 void FileLock::Unlock() {
     41   if (!acquired_)
     42     return;
     43   Barrier();
     44   (*updating_)--;
     45 }
     46 
     47 }  // namespace disk_cache
     48