OLD | NEW |
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 #include "base/shared_memory.h" | 5 #include "base/shared_memory.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <fcntl.h> | 8 #include <fcntl.h> |
9 #include <sys/mman.h> | 9 #include <sys/mman.h> |
10 | 10 |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 SharedMemoryHandle *new_handle, | 134 SharedMemoryHandle *new_handle, |
135 bool close_self) { | 135 bool close_self) { |
136 *new_handle = 0; | 136 *new_handle = 0; |
137 // TODO(awalker): figure out if we need this, and do the appropriate | 137 // TODO(awalker): figure out if we need this, and do the appropriate |
138 // VM magic if so. | 138 // VM magic if so. |
139 return false; | 139 return false; |
140 } | 140 } |
141 | 141 |
142 | 142 |
143 void SharedMemory::Close() { | 143 void SharedMemory::Close() { |
144 if (memory_ != NULL) { | |
145 munmap(memory_, max_size_); | |
146 | 144 |
147 memory_ = NULL; | 145 Unmap(); |
148 max_size_ = 0; | |
149 } | |
150 | 146 |
151 std::string posix_name(WideToUTF8(name_)); | 147 std::string posix_name(WideToUTF8(name_)); |
152 if (mapped_file_ > 0) { | 148 if (mapped_file_ > 0) { |
153 close(mapped_file_); | 149 close(mapped_file_); |
154 shm_unlink(posix_name.c_str()); | 150 shm_unlink(posix_name.c_str()); |
155 mapped_file_ = -1; | 151 mapped_file_ = -1; |
156 } | 152 } |
157 | 153 |
158 if (lock_) { | 154 if (lock_) { |
159 posix_name += kSemaphoreSuffix; | 155 posix_name += kSemaphoreSuffix; |
160 sem_unlink(posix_name.c_str()); | 156 sem_unlink(posix_name.c_str()); |
161 lock_ = NULL; | 157 lock_ = NULL; |
162 } | 158 } |
163 } | 159 } |
164 | 160 |
165 void SharedMemory::Lock() { | 161 void SharedMemory::Lock() { |
166 DCHECK(lock_ != NULL); | 162 DCHECK(lock_ != NULL); |
167 while(sem_wait(lock_) < 0) { | 163 while(sem_wait(lock_) < 0) { |
168 DCHECK(errno == EAGAIN || errno == EINTR); | 164 DCHECK(errno == EAGAIN || errno == EINTR); |
169 } | 165 } |
170 } | 166 } |
171 | 167 |
172 void SharedMemory::Unlock() { | 168 void SharedMemory::Unlock() { |
173 DCHECK(lock_ != NULL); | 169 DCHECK(lock_ != NULL); |
174 int result = sem_post(lock_); | 170 int result = sem_post(lock_); |
175 DCHECK(result == 0); | 171 DCHECK(result == 0); |
176 } | 172 } |
177 | 173 |
178 } // namespace base | 174 } // namespace base |
OLD | NEW |