Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(281)

Side by Side Diff: base/shared_memory.h

Issue 7307: Reduce header dependencies. (Closed)
Patch Set: retry Created 12 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | base/stats_table.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BASE_SHARED_MEMORY_H_ 5 #ifndef BASE_SHARED_MEMORY_H_
6 #define BASE_SHARED_MEMORY_H_ 6 #define BASE_SHARED_MEMORY_H_
7 7
8 #include <string>
8 #include "base/basictypes.h" 9 #include "base/basictypes.h"
9 #include "base/process_util.h" 10 #include "base/process.h"
10 11
11 // SharedMemoryHandle is a platform specific type which represents 12 // SharedMemoryHandle is a platform specific type which represents
12 // the underlying OS handle to a shared memory segment. 13 // the underlying OS handle to a shared memory segment.
13 #if defined(OS_WIN) 14 #if defined(OS_WIN)
14 typedef HANDLE SharedMemoryHandle; 15 typedef HANDLE SharedMemoryHandle;
15 typedef HANDLE SharedMemoryLock; 16 typedef HANDLE SharedMemoryLock;
16 #elif defined(OS_POSIX) 17 #elif defined(OS_POSIX)
17 #include <semaphore.h> 18 #include <semaphore.h>
18 typedef int SharedMemoryHandle; 19 typedef int SharedMemoryHandle;
19 typedef sem_t* SharedMemoryLock; 20 typedef sem_t* SharedMemoryLock;
(...skipping 17 matching lines...) Expand all
37 ProcessHandle process); 38 ProcessHandle process);
38 39
39 // Destructor. Will close any open files. 40 // Destructor. Will close any open files.
40 ~SharedMemory(); 41 ~SharedMemory();
41 42
42 // Creates or opens a shared memory segment based on a name. 43 // Creates or opens a shared memory segment based on a name.
43 // If read_only is true, opens the memory as read-only. 44 // If read_only is true, opens the memory as read-only.
44 // If open_existing is true, and the shared memory already exists, 45 // If open_existing is true, and the shared memory already exists,
45 // opens the existing shared memory and ignores the size parameter. 46 // opens the existing shared memory and ignores the size parameter.
46 // Returns true on success, false on failure. 47 // Returns true on success, false on failure.
47 bool Create(const std::wstring &name, bool read_only, bool open_existing, 48 bool Create(const std::wstring& name, bool read_only, bool open_existing,
48 size_t size); 49 size_t size);
49 50
50 // Opens a shared memory segment based on a name. 51 // Opens a shared memory segment based on a name.
51 // If read_only is true, opens for read-only access. 52 // If read_only is true, opens for read-only access.
52 // Returns true on success, false on failure. 53 // Returns true on success, false on failure.
53 bool Open(const std::wstring &name, bool read_only); 54 bool Open(const std::wstring& name, bool read_only);
54 55
55 // Maps the shared memory into the caller's address space. 56 // Maps the shared memory into the caller's address space.
56 // Returns true on success, false otherwise. The memory address 57 // Returns true on success, false otherwise. The memory address
57 // is accessed via the memory() accessor. 58 // is accessed via the memory() accessor.
58 bool Map(size_t bytes); 59 bool Map(size_t bytes);
59 60
60 // Unmaps the shared memory from the caller's address space. 61 // Unmaps the shared memory from the caller's address space.
61 // Returns true if successful; returns false on error or if the 62 // Returns true if successful; returns false on error or if the
62 // memory is not mapped. 63 // memory is not mapped.
63 bool Unmap(); 64 bool Unmap();
(...skipping 18 matching lines...) Expand all
82 // It is safe to call Close repeatedly. 83 // It is safe to call Close repeatedly.
83 void Close(); 84 void Close();
84 85
85 // Share the shared memory to another process. Attempts 86 // Share the shared memory to another process. Attempts
86 // to create a platform-specific new_handle which can be 87 // to create a platform-specific new_handle which can be
87 // used in a remote process to access the shared memory 88 // used in a remote process to access the shared memory
88 // file. new_handle is an ouput parameter to receive 89 // file. new_handle is an ouput parameter to receive
89 // the handle for use in the remote process. 90 // the handle for use in the remote process.
90 // Returns true on success, false otherwise. 91 // Returns true on success, false otherwise.
91 bool ShareToProcess(ProcessHandle process, 92 bool ShareToProcess(ProcessHandle process,
92 SharedMemoryHandle *new_handle) { 93 SharedMemoryHandle* new_handle) {
93 return ShareToProcessCommon(process, new_handle, false); 94 return ShareToProcessCommon(process, new_handle, false);
94 } 95 }
95 96
96 // Logically equivalent to: 97 // Logically equivalent to:
97 // bool ok = ShareToProcess(process, new_handle); 98 // bool ok = ShareToProcess(process, new_handle);
98 // Close(); 99 // Close();
99 // return ok; 100 // return ok;
100 bool GiveToProcess(ProcessHandle process, 101 bool GiveToProcess(ProcessHandle process,
101 SharedMemoryHandle *new_handle) { 102 SharedMemoryHandle* new_handle) {
102 return ShareToProcessCommon(process, new_handle, true); 103 return ShareToProcessCommon(process, new_handle, true);
103 } 104 }
104 105
105 // Lock the shared memory. 106 // Lock the shared memory.
106 // This is a cross-process lock which may be recursively 107 // This is a cross-process lock which may be recursively
107 // locked by the same thread. 108 // locked by the same thread.
108 void Lock(); 109 void Lock();
109 110
110 // Release the shared memory lock. 111 // Release the shared memory lock.
111 void Unlock(); 112 void Unlock();
112 113
113 private: 114 private:
114 #if defined(OS_POSIX) 115 #if defined(OS_POSIX)
115 bool CreateOrOpen(const std::wstring &name, int posix_flags); 116 bool CreateOrOpen(const std::wstring &name, int posix_flags);
116 #endif 117 #endif
117 bool ShareToProcessCommon(ProcessHandle process, 118 bool ShareToProcessCommon(ProcessHandle process,
118 SharedMemoryHandle *new_handle, bool close_self); 119 SharedMemoryHandle* new_handle,
120 bool close_self);
119 121
120 std::wstring name_; 122 std::wstring name_;
121 SharedMemoryHandle mapped_file_; 123 SharedMemoryHandle mapped_file_;
122 void* memory_; 124 void* memory_;
123 bool read_only_; 125 bool read_only_;
124 size_t max_size_; 126 size_t max_size_;
125 SharedMemoryLock lock_; 127 SharedMemoryLock lock_;
126 128
127 DISALLOW_EVIL_CONSTRUCTORS(SharedMemory); 129 DISALLOW_EVIL_CONSTRUCTORS(SharedMemory);
128 }; 130 };
(...skipping 11 matching lines...) Expand all
140 shared_memory_->Unlock(); 142 shared_memory_->Unlock();
141 } 143 }
142 144
143 private: 145 private:
144 SharedMemory* shared_memory_; 146 SharedMemory* shared_memory_;
145 DISALLOW_EVIL_CONSTRUCTORS(SharedMemoryAutoLock); 147 DISALLOW_EVIL_CONSTRUCTORS(SharedMemoryAutoLock);
146 }; 148 };
147 149
148 150
149 #endif // BASE_SHARED_MEMORY_H_ 151 #endif // BASE_SHARED_MEMORY_H_
150
OLDNEW
« no previous file with comments | « no previous file | base/stats_table.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698