Index: base/shared_memory.h |
diff --git a/base/shared_memory.h b/base/shared_memory.h |
index b44367a7fcc875e16e91e6e486f73c0316debd15..744b3489e7d9d7fb21c6d7d5878019faa7091a86 100644 |
--- a/base/shared_memory.h |
+++ b/base/shared_memory.h |
@@ -8,6 +8,7 @@ |
#include "build/build_config.h" |
#if defined(OS_POSIX) |
+#include <sys/types.h> |
#include <semaphore.h> |
#include "base/file_descriptor_posix.h" |
#endif |
@@ -24,7 +25,10 @@ namespace base { |
typedef HANDLE SharedMemoryHandle; |
typedef HANDLE SharedMemoryLock; |
#elif defined(OS_POSIX) |
+// A SharedMemoryId is sufficient to identify a given shared memory segment on a |
+// system, but insufficient to map it. |
typedef FileDescriptor SharedMemoryHandle; |
+typedef ino_t SharedMemoryId; |
// On POSIX, the lock is implemented as a lockf() on the mapped file, |
// so no additional member (or definition of SharedMemoryLock) is |
// needed. |
@@ -99,6 +103,14 @@ class SharedMemory { |
// identifier is not portable. |
SharedMemoryHandle handle() const; |
+#if defined(OS_POSIX) |
+ // Return a unique identifier for this shared memory segment. Inode numbers |
+ // are technically only unique to a single filesystem. However, we always |
+ // allocate shared memory backing files from the same directory, so will end |
+ // up on the same filesystem. |
+ SharedMemoryId id() const { return inode_; } |
+#endif |
+ |
// Closes the open shared memory segment. |
// It is safe to call Close repeatedly. |
void Close(); |
@@ -153,9 +165,10 @@ class SharedMemory { |
std::wstring name_; |
#if defined(OS_WIN) |
- HANDLE mapped_file_; |
+ HANDLE mapped_file_; |
#elif defined(OS_POSIX) |
- int mapped_file_; |
+ int mapped_file_; |
+ ino_t inode_; |
#endif |
void* memory_; |
bool read_only_; |