Index: /trunk/mmap.c
===================================================================
--- /trunk/mmap.c	(revision 21)
+++ /trunk/mmap.c	(revision 57)
@@ -12,5 +12,5 @@
 #	define ftruncate chsize
 #	define getuid() 0
-#	define XcacheCreateFileMapping(size, perm, name) \
+#	define XCacheCreateFileMapping(size, perm, name) \
 		CreateFileMapping(INVALID_HANDLE_VALUE, NULL, perm, (sizeof(xc_shmsize_t) > 4) ? size >> 32 : 0, size & 0xffffffff, name)
 #	define XCACHE_MAP_FAILED NULL
@@ -43,4 +43,5 @@
 	xc_shmsize_t size;
 	char *name;
+	int newfile;
 #ifdef ZEND_WIN32
 	HANDLE hmap;
@@ -123,5 +124,7 @@
 	if (shm->name) {
 #ifdef __CYGWIN__
-		unlink(shm->name);
+		if (shm->newfile) {
+			unlink(shm->name);
+		}
 #endif
 		free(shm->name);
@@ -165,13 +168,17 @@
 	if (fd == -1) {
 		fd = open(shm->name, O_CREAT | O_RDWR, XCACHE_MMAP_PERMISSION);
+		shm->newfile = 1;
 		if (fd == -1) {
 			goto err;
 		}
 	}
+	if (strncmp(shm->name, "/tmp", 4) == 0) {
+		shm->newfile = 0;
+	}
 	ftruncate(fd, size);
 #endif
 
 #ifdef ZEND_WIN32
-	shm->hmap = XcacheCreateFileMapping(size, PAGE_READWRITE, shm->name);
+	shm->hmap = XCacheCreateFileMapping(size, PAGE_READWRITE, shm->name);
 	shm->ptr = (LPSTR) MapViewOfFile(shm->hmap, FILE_MAP_WRITE, 0, 0, 0);
 #else
@@ -187,5 +194,5 @@
 	if (readonly_protection) {
 #ifdef ZEND_WIN32
-		shm->hmap_ro = XcacheCreateFileMapping(size, PAGE_READONLY, shm->name);
+		shm->hmap_ro = XCacheCreateFileMapping(size, PAGE_READONLY, shm->name);
 		shm->ptr_ro = (LPSTR) MapViewOfFile(shm->hmap_ro, FILE_MAP_READ, 0, 0, 0);
 #else
@@ -226,5 +233,7 @@
 	close(fd);
 #ifndef __CYGWIN__
-	unlink(shm->name);
+	if (shm->newfile) {
+		unlink(shm->name);
+	}
 #endif
 
