mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
48 lines
819 B
C++
48 lines
819 B
C++
|
// 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/blockfile/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
|