Changeset 79
- Timestamp:
- 2006-06-16T02:50:51+02:00 (7 years ago)
- File:
-
- 1 edited
-
trunk/mmap.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/mmap.c
r61 r79 18 18 #else 19 19 # include <unistd.h> 20 /* make sure to mark(change) it to NULL to keep consistent */ 20 21 # define XCACHE_MAP_FAILED MAP_FAILED 21 22 #endif … … 192 193 } 193 194 194 ro_ok = 0;195 /* {{{ readonly protection, mmap it readonly and check if ptr_ro works */ 195 196 if (readonly_protection) { 197 ro_ok = 0; 198 196 199 #ifdef ZEND_WIN32 197 200 shm->hmap_ro = XCacheCreateFileMapping(size, PAGE_READONLY, shm->name); … … 200 203 shm->ptr_ro = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0); 201 204 #endif 205 if (shm->ptr_ro == XCACHE_MAP_FAILED) { 206 shm->ptr_ro = NULL; 207 } 202 208 romem = shm->ptr_ro; 203 209 204 /* {{{ check if ptr_ro works */205 210 do { 206 if ( shm->ptr_ro == XCACHE_MAP_FAILED || shm->ptr_ro== shm->ptr) {211 if (romem == NULL || romem == shm->ptr) { 207 212 break; 208 213 } … … 217 222 ro_ok = 1; 218 223 } while (0); 219 } 220 221 if (ro_ok) { 222 shm->diff = PTR_SUB(shm->ptr_ro, (char *) shm->ptr); 223 assert(abs(shm->diff) >= size); 224 } 225 else { 226 if (shm->ptr_ro != XCACHE_MAP_FAILED) { 227 munmap(shm->ptr_ro, size); 228 } 229 shm->ptr_ro = NULL; 230 shm->diff = 0; 231 } 224 225 if (ro_ok) { 226 shm->diff = PTR_SUB(shm->ptr_ro, (char *) shm->ptr); 227 /* no overlap */ 228 assert(abs(shm->diff) >= size); 229 } 230 else { 231 if (shm->ptr_ro) { 232 munmap(shm->ptr_ro, size); 233 } 234 #ifdef ZEND_WIN32 235 if (shm->hmap_ro) { 236 CloseHandle(shm->hmap_ro); 237 } 238 #endif 239 shm->ptr_ro = NULL; 240 shm->diff = 0; 241 } 242 } 243 232 244 /* }}} */ 233 245
Note: See TracChangeset
for help on using the changeset viewer.

