summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2016-08-25 12:46:28 +0200
committerAnatol Belski <ab@php.net>2016-08-25 12:46:28 +0200
commita1ff39ffe5cc3e83bd51b2511163e2e620e935d2 (patch)
tree761d0cf4f29eabcc4a4c82a26be42076e4a4fb30
parent6a232c3604f6c00f6c09cc3782dd1b36b30d23d4 (diff)
downloadphp-git-a1ff39ffe5cc3e83bd51b2511163e2e620e935d2.tar.gz
backport relevant part from bug #72858 patch in 7.0
-rw-r--r--TSRM/tsrm_win32.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/TSRM/tsrm_win32.c b/TSRM/tsrm_win32.c
index 06e4561f92..f81f93c3e5 100644
--- a/TSRM/tsrm_win32.c
+++ b/TSRM/tsrm_win32.c
@@ -654,17 +654,27 @@ TSRM_API int shmget(int key, int size, int flags)
TSRM_API void *shmat(int key, const void *shmaddr, int flags)
{
shm_pair *shm = shm_get(key, NULL);
+ int err;
if (!shm->segment) {
return (void*)-1;
}
+ shm->addr = MapViewOfFileEx(shm->segment, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
+
+ err = GetLastError();
+ if (err) {
+ /* Catch more errors */
+ if (ERROR_NOT_ENOUGH_MEMORY == err) {
+ _set_errno(ENOMEM);
+ }
+ return (void*)-1;
+ }
+
shm->descriptor->shm_atime = time(NULL);
shm->descriptor->shm_lpid = getpid();
shm->descriptor->shm_nattch++;
- shm->addr = MapViewOfFileEx(shm->segment, FILE_MAP_ALL_ACCESS, 0, 0, 0, NULL);
-
return shm->addr;
}