// Copyright (c) 2012 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 "net/disk_cache/file_lock.h"

#include "base/atomicops.h"

namespace {

void Barrier() {
#if !defined(COMPILER_MSVC)
  // VS uses memory barrier semantics for volatiles.
  base::subtle::MemoryBarrier();
#endif
}

}  // namespace

namespace disk_cache {

FileLock::FileLock(BlockFileHeader* header) {
  updating_ = &header->updating;
  (*updating_)++;
  Barrier();
  acquired_ = true;
}

FileLock::~FileLock() {
  Unlock();
}

void FileLock::Lock() {
  if (acquired_)
    return;
  (*updating_)++;
  Barrier();
}

void FileLock::Unlock() {
  if (!acquired_)
    return;
  Barrier();
  (*updating_)--;
}

}  // namespace disk_cache
