Skip to content

Commit bd9f178

Browse files
committed
Merge remote-tracking branch 'origin/master' into native-tls
* origin/master: bring back the correct php_version.h fix the empty_strings SAPI shutdown leak in TS build Use fastcall calling convention for heap functions fix leaking the empty_string in TS builds remove successive assignment
2 parents 60f0695 + 5d7ccb7 commit bd9f178

File tree

7 files changed

+39
-28
lines changed

7 files changed

+39
-28
lines changed

Zend/zend.c

+2-5
Original file line numberDiff line numberDiff line change
@@ -445,10 +445,7 @@ static void compiler_globals_ctor(zend_compiler_globals *compiler_globals TSRMLS
445445
compiler_globals->script_encoding_list = NULL;
446446

447447
#ifdef ZTS
448-
compiler_globals->empty_string = zend_string_alloc(sizeof("")-1, 1);
449-
compiler_globals->empty_string->val[0] = '\000';
450-
zend_string_hash_val(compiler_globals->empty_string);
451-
compiler_globals->empty_string->gc.u.v.flags |= IS_STR_INTERNED;
448+
zend_interned_empty_string_init(&compiler_globals->empty_string TSRMLS_CC);
452449

453450
memset(compiler_globals->one_char_string, 0, sizeof(compiler_globals->one_char_string));
454451
#endif
@@ -478,7 +475,7 @@ static void compiler_globals_dtor(zend_compiler_globals *compiler_globals TSRMLS
478475
compiler_globals->last_static_member = 0;
479476

480477
#ifdef ZTS
481-
zend_string_release(compiler_globals->empty_string);
478+
zend_interned_empty_string_free(&compiler_globals->empty_string TSRMLS_CC);
482479
#endif
483480
}
484481
/* }}} */

Zend/zend_alloc.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -1977,22 +1977,22 @@ void zend_mm_shutdown(zend_mm_heap *heap, int full, int silent TSRMLS_DC)
19771977
/* PUBLIC API */
19781978
/**************/
19791979

1980-
ZEND_API void *_zend_mm_alloc(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
1980+
ZEND_API void* ZEND_FASTCALL _zend_mm_alloc(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
19811981
{
19821982
return zend_mm_alloc_heap(heap, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
19831983
}
19841984

1985-
ZEND_API void _zend_mm_free(zend_mm_heap *heap, void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
1985+
ZEND_API void ZEND_FASTCALL _zend_mm_free(zend_mm_heap *heap, void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
19861986
{
19871987
zend_mm_free_heap(heap, ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
19881988
}
19891989

1990-
void *_zend_mm_realloc(zend_mm_heap *heap, void *ptr, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
1990+
void* ZEND_FASTCALL _zend_mm_realloc(zend_mm_heap *heap, void *ptr, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
19911991
{
19921992
return zend_mm_realloc_heap(heap, ptr, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
19931993
}
19941994

1995-
ZEND_API size_t _zend_mm_block_size(zend_mm_heap *heap, void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
1995+
ZEND_API size_t ZEND_FASTCALL _zend_mm_block_size(zend_mm_heap *heap, void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
19961996
{
19971997
return zend_mm_size(heap, ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
19981998
}

Zend/zend_alloc.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,10 @@ typedef struct _zend_mm_heap zend_mm_heap;
238238

239239
ZEND_API zend_mm_heap *zend_mm_startup(void);
240240
ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, int full_shutdown, int silent TSRMLS_DC);
241-
ZEND_API void *_zend_mm_alloc(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC;
242-
ZEND_API void _zend_mm_free(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
243-
ZEND_API void *_zend_mm_realloc(zend_mm_heap *heap, void *p, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
244-
ZEND_API size_t _zend_mm_block_size(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
241+
ZEND_API void* ZEND_FASTCALL _zend_mm_alloc(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC;
242+
ZEND_API void ZEND_FASTCALL _zend_mm_free(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
243+
ZEND_API void* ZEND_FASTCALL _zend_mm_realloc(zend_mm_heap *heap, void *p, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
244+
ZEND_API size_t ZEND_FASTCALL _zend_mm_block_size(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
245245

246246
#define zend_mm_alloc(heap, size) _zend_mm_alloc((heap), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
247247
#define zend_mm_free(heap, p) _zend_mm_free((heap), (p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)

Zend/zend_string.c

+1-9
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ static void _str_dtor(zval *zv)
4545

4646
void zend_interned_strings_init(TSRMLS_D)
4747
{
48+
#ifndef ZTS
4849
zend_string *str;
4950

50-
#ifndef ZTS
5151
zend_hash_init(&CG(interned_strings), 1024, NULL, _str_dtor, 1);
5252

5353
CG(interned_strings).nTableMask = CG(interned_strings).nTableSize - 1;
@@ -59,12 +59,6 @@ void zend_interned_strings_init(TSRMLS_D)
5959
str = zend_string_alloc(sizeof("")-1, 1);
6060
str->val[0] = '\000';
6161
CG(empty_string) = zend_new_interned_string_int(str TSRMLS_CC);
62-
#else
63-
str = zend_string_alloc(sizeof("")-1, 1);
64-
str->val[0] = '\000';
65-
zend_string_hash_val(str);
66-
str->gc.u.v.flags |= IS_STR_INTERNED;
67-
CG(empty_string) = str;
6862
#endif
6963

7064
/* one char strings (the actual interned strings are going to be created by ext/opcache) */
@@ -79,8 +73,6 @@ void zend_interned_strings_dtor(TSRMLS_D)
7973
{
8074
#ifndef ZTS
8175
zend_hash_destroy(&CG(interned_strings));
82-
#else
83-
zend_string_release(CG(empty_string));
8476
#endif
8577
}
8678

Zend/zend_string.h

+24
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,30 @@ EMPTY_SWITCH_DEFAULT_CASE()
282282
return hash;
283283
}
284284

285+
static zend_always_inline void zend_interned_empty_string_init(zend_string **s TSRMLS_DC)
286+
{
287+
zend_string *str;
288+
289+
str = zend_string_alloc(sizeof("")-1, 1);
290+
str->val[0] = '\000';
291+
292+
#ifndef ZTS
293+
*s = zend_new_interned_string(str TSRMLS_CC);
294+
#else
295+
zend_string_hash_val(str);
296+
str->gc.u.v.flags |= IS_STR_INTERNED;
297+
*s = str;
298+
#endif
299+
}
300+
301+
static zend_always_inline void zend_interned_empty_string_free(zend_string **s TSRMLS_DC)
302+
{
303+
if (NULL != *s) {
304+
free(*s);
305+
*s = NULL;
306+
}
307+
}
308+
285309
#endif /* ZEND_STRING_H */
286310

287311
/*

ext/zlib/zlib_filter.c

-2
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,6 @@ static php_stream_filter_status_t php_zlib_inflate_filter(
7676
while (buckets_in->head) {
7777
size_t bin = 0, desired;
7878

79-
bucket = buckets_in->head;
80-
8179
bucket = php_stream_bucket_make_writeable(buckets_in->head TSRMLS_CC);
8280

8381
while (bin < (unsigned int) bucket->buflen) {

main/php_version.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
/* automatically generated by configure */
22
/* edit configure.in to change version number */
3-
#define PHP_MAJOR_VERSION 5
4-
#define PHP_MINOR_VERSION 7
3+
#define PHP_MAJOR_VERSION 7
4+
#define PHP_MINOR_VERSION 0
55
#define PHP_RELEASE_VERSION 0
66
#define PHP_EXTRA_VERSION "-dev"
7-
#define PHP_VERSION "5.7.0-dev"
8-
#define PHP_VERSION_ID 50700
7+
#define PHP_VERSION "7.0.0-dev"
8+
#define PHP_VERSION_ID 70000

0 commit comments

Comments
 (0)