Skip to content

Commit 826b90a

Browse files
committed
Revert "Merge branch 'PHP-7.3' into PHP-7.4"
This reverts commit e1f6ab3, reversing changes made to e0ebe56. There are obviously issues with running tests in parallel, maybe related to the cache ID. This needs to be investigated. Revert for now.
1 parent f879244 commit 826b90a

File tree

2 files changed

+56
-16
lines changed

2 files changed

+56
-16
lines changed

NEWS

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ PHP NEWS
1212
- LDAP:
1313
. Fixed memory leaks. (ptomulik)
1414

15-
- OPcache:
16-
. Fixed bug #73060 (php failed with error after temp folder cleaned up).
17-
(cmb)
18-
1915
06 Aug 2020, PHP 7.4.9
2016

2117
- Apache:

ext/opcache/shared_alloc_win32.c

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,10 @@
3333

3434
#define ACCEL_FILEMAP_NAME "ZendOPcache.SharedMemoryArea"
3535
#define ACCEL_MUTEX_NAME "ZendOPcache.SharedMemoryMutex"
36+
#define ACCEL_FILEMAP_BASE_DEFAULT 0x01000000
37+
#define ACCEL_FILEMAP_BASE "ZendOPcache.MemoryBase"
3638
#define ACCEL_EVENT_SOURCE "Zend OPcache"
3739

38-
/* address of mapping base and address of execute_ex */
39-
#define ACCEL_BASE_POINTER_SIZE (2 * sizeof(void*))
40-
4140
static HANDLE memfile = NULL, memory_mutex = NULL;
4241
static void *mapping_base;
4342

@@ -76,6 +75,22 @@ static char *create_name_with_username(char *name)
7675
return newname;
7776
}
7877

78+
static char *get_mmap_base_file(void)
79+
{
80+
static char windir[MAXPATHLEN+ 32 + 3 + sizeof("\\\\@") + 1 + 32 + 21];
81+
int l;
82+
83+
GetTempPath(MAXPATHLEN, windir);
84+
l = strlen(windir);
85+
if ('\\' == windir[l-1]) {
86+
l--;
87+
}
88+
89+
snprintf(windir + l, sizeof(windir) - l - 1, "\\%s@%.32s@%.20s@%.32s", ACCEL_FILEMAP_BASE, accel_uname_id, sapi_module.name, accel_system_id);
90+
91+
return windir;
92+
}
93+
7994
void zend_shared_alloc_create_lock(void)
8095
{
8196
memory_mutex = CreateMutex(NULL, FALSE, create_name_with_username(ACCEL_MUTEX_NAME));
@@ -104,20 +119,39 @@ static int zend_shared_alloc_reattach(size_t requested_size, char **error_in)
104119
{
105120
int err;
106121
void *wanted_mapping_base;
122+
char *mmap_base_file = get_mmap_base_file();
123+
FILE *fp = fopen(mmap_base_file, "r");
107124
MEMORY_BASIC_INFORMATION info;
108125
void *execute_ex_base;
109126
int execute_ex_moved;
110127

111-
mapping_base = MapViewOfFileEx(memfile, FILE_MAP_ALL_ACCESS, 0, 0, ACCEL_BASE_POINTER_SIZE, NULL);
112-
if (mapping_base == NULL) {
128+
if (!fp) {
129+
err = GetLastError();
130+
zend_win_error_message(ACCEL_LOG_WARNING, mmap_base_file, err);
131+
zend_win_error_message(ACCEL_LOG_FATAL, "Unable to open base address file", err);
132+
*error_in="fopen";
133+
return ALLOC_FAILURE;
134+
}
135+
if (!fscanf(fp, "%p", &wanted_mapping_base)) {
113136
err = GetLastError();
114137
zend_win_error_message(ACCEL_LOG_FATAL, "Unable to read base address", err);
115138
*error_in="read mapping base";
139+
fclose(fp);
140+
return ALLOC_FAILURE;
141+
}
142+
if (!fscanf(fp, "%p", &execute_ex_base)) {
143+
err = GetLastError();
144+
zend_win_error_message(ACCEL_LOG_FATAL, "Unable to read execute_ex base address", err);
145+
*error_in="read execute_ex base";
146+
fclose(fp);
116147
return ALLOC_FAILURE;
117148
}
118-
wanted_mapping_base = ((void**)mapping_base)[0];
119-
execute_ex_base = ((void**)mapping_base)[1];
120-
UnmapViewOfFile(mapping_base);
149+
fclose(fp);
150+
151+
if (0 > win32_utime(mmap_base_file, NULL)) {
152+
err = GetLastError();
153+
zend_win_error_message(ACCEL_LOG_WARNING, mmap_base_file, err);
154+
}
121155

122156
execute_ex_moved = (void *)execute_ex != execute_ex_base;
123157

@@ -173,7 +207,7 @@ static int zend_shared_alloc_reattach(size_t requested_size, char **error_in)
173207
}
174208
return ALLOC_FAIL_MAPPING;
175209
}
176-
smm_shared_globals = (zend_smm_shared_globals *) ((char*)mapping_base + ACCEL_BASE_POINTER_SIZE);
210+
smm_shared_globals = (zend_smm_shared_globals *) mapping_base;
177211

178212
return SUCCESSFULLY_REATTACHED;
179213
}
@@ -291,9 +325,19 @@ static int create_segments(size_t requested_size, zend_shared_segment ***shared_
291325
*error_in = "MapViewOfFile";
292326
return ALLOC_FAILURE;
293327
} else {
294-
((void**)mapping_base)[0] = mapping_base;
295-
((void**)mapping_base)[1] = (void*)execute_ex;
296-
((char*)shared_segment->p) += ACCEL_BASE_POINTER_SIZE;
328+
char *mmap_base_file = get_mmap_base_file();
329+
void *execute_ex_base = (void *)execute_ex;
330+
FILE *fp = fopen(mmap_base_file, "w");
331+
if (!fp) {
332+
err = GetLastError();
333+
zend_shared_alloc_unlock_win32();
334+
zend_win_error_message(ACCEL_LOG_WARNING, mmap_base_file, err);
335+
zend_win_error_message(ACCEL_LOG_FATAL, "Unable to write base address", err);
336+
return ALLOC_FAILURE;
337+
}
338+
fprintf(fp, "%p\n", mapping_base);
339+
fprintf(fp, "%p\n", execute_ex_base);
340+
fclose(fp);
297341
}
298342

299343
shared_segment->pos = 0;

0 commit comments

Comments
 (0)