// 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 |