diff options
Diffstat (limited to 'chromium/net/disk_cache/file_lock.h')
-rw-r--r-- | chromium/net/disk_cache/file_lock.h | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/chromium/net/disk_cache/file_lock.h b/chromium/net/disk_cache/file_lock.h new file mode 100644 index 00000000000..7fcf75df05a --- /dev/null +++ b/chromium/net/disk_cache/file_lock.h @@ -0,0 +1,45 @@ +// Copyright (c) 2011 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. + +// See net/disk_cache/disk_cache.h for the public interface of the cache. + +#ifndef NET_DISK_CACHE_FILE_LOCK_H_ +#define NET_DISK_CACHE_FILE_LOCK_H_ + +#include "net/base/net_export.h" +#include "net/disk_cache/disk_format_base.h" + +namespace disk_cache { + +// This class implements a file lock that lives on the header of a memory mapped +// file. This is NOT a thread related lock, it is a lock to detect corruption +// of the file when the process crashes in the middle of an update. +// The lock is acquired on the constructor and released on the destructor. +// The typical use of the class is: +// { +// BlockFileHeader* header = GetFileHeader(); +// FileLock lock(header); +// header->max_entries = num_entries; +// // At this point the destructor is going to release the lock. +// } +// It is important to perform Lock() and Unlock() operations in the right order, +// because otherwise the desired effect of the "lock" will not be achieved. If +// the operations are inlined / optimized, the "locked" operations can happen +// outside the lock. +class NET_EXPORT_PRIVATE FileLock { + public: + explicit FileLock(BlockFileHeader* header); + virtual ~FileLock(); + + // Virtual to make sure the compiler never inlines the calls. + virtual void Lock(); + virtual void Unlock(); + private: + bool acquired_; + volatile int32* updating_; +}; + +} // namespace disk_cache + +#endif // NET_DISK_CACHE_FILE_LOCK_H_ |