Revision tags: php-8.0.3RC1, php-7.4.16RC1, php-8.0.2, php-7.4.15, php-7.3.27, php-8.0.2RC1, php-7.4.15RC2, php-7.4.15RC1, php-8.0.1, php-7.4.14, php-7.3.26, php-7.4.14RC1, php-8.0.1RC1, php-7.3.26RC1, php-8.0.0, php-7.3.25, php-7.4.13, php-8.0.0RC5, php-7.4.13RC1, php-8.0.0RC4, php-7.3.25RC1, php-7.4.12, php-8.0.0RC3, php-7.3.24, php-8.0.0RC2, php-7.4.12RC1, php-7.3.24RC1, php-7.2.34, php-8.0.0rc1, php-7.4.11, php-7.3.23, php-8.0.0beta4, php-7.4.11RC1, php-7.3.23RC1, php-8.0.0beta3, php-7.4.10, php-7.3.22, php-8.0.0beta2, php-7.3.22RC1, php-7.4.10RC1, php-8.0.0beta1, php-7.4.9, php-7.2.33, php-7.3.21, php-8.0.0alpha3, php-7.4.9RC1, php-7.3.21RC1, php-7.4.8, php-7.2.32, php-8.0.0alpha2, php-7.3.20, php-8.0.0alpha1, php-7.4.8RC1, php-7.3.20RC1 |
|
#
269c8dac |
| 10-Jun-2020 |
Ilija Tovilo |
Implement enums RFC: https://wiki.php.net/rfc/enumerations Co-authored-by: Nikita Popov <nikita.ppv@gmail.com> Closes GH-6489. |
#
709e45d8 |
| 17-Mar-2021 |
Nikita Popov |
Avoid unnecessary static_variables persistence static_variables should be treated the same way as all other op_array components nowadays (only static_variables_ptr is special). There
Avoid unnecessary static_variables persistence static_variables should be treated the same way as all other op_array components nowadays (only static_variables_ptr is special). There's no need to persist/serialize it is separately per shared op_array.
show more ...
|
#
4cff8c10 |
| 17-Mar-2021 |
Nikita Popov |
Simplify attribute persistence For an inherited op_array, directly fetch the xlat entry, as we do for everything else. |
#
c732ab40 |
| 16-Mar-2021 |
Dmitry Stogov |
Change Zend Stream API to use zend_string* instead of char*. This allows to eliminate re-calculation of string lenght and hash value. See the detailed list of changes in UPGRADING.INTERN
Change Zend Stream API to use zend_string* instead of char*. This allows to eliminate re-calculation of string lenght and hash value. See the detailed list of changes in UPGRADING.INTERNALS.
show more ...
|
#
d0219785 |
| 10-Mar-2021 |
Dmitry Stogov |
Fixed assertion (ext/opcache/zend_persist.c:327: zend_accel_get_type_map_ptr: Assertion `ret > 2' failed) |
#
97de8cfc |
| 04-Mar-2021 |
Nikita Popov |
Fix dynamic func def persist with preloading If we find an existing serialization of the op_array, of course we also need to actually make use of it... |
Revision tags: php-7.4.7, php-7.3.19, php-7.4.7RC1, php-7.3.19RC1 |
|
#
47a2e5c7 |
| 18-May-2020 |
Nikita Popov |
Reference dynamic functions through dynamic_defs Currently, dynamically declared functions and closures are inserted into the function table under a runtime definition key, and then late
Reference dynamic functions through dynamic_defs Currently, dynamically declared functions and closures are inserted into the function table under a runtime definition key, and then later possibly renamed. When opcache is not used and a file containing a closure is repeatedly included, this leads to a very large memory leak, as the no longer needed closure declarations will never be freed (https://bugs.php.net/bug.php?id=76982). With this patch, dynamic functions are instead stored in a dynamic_func_defs member on the op_array, which opcodes reference by index. When the parent op_array is destroyed, the dynamic_func_defs it contains are also destroyed (unless they are stilled used elsewhere, e.g. because they have been bound, or are used by a live closure). This resolves the fundamental part of the leak, though doesn't completely fix it yet due to some arena allocations. The main non-obvious change here is to static variable handling: We can't destroy static_variables_ptr in destroy_op_array, as e.g. that would clear the static variables in a dynamic function when the op_array containing it is destroyed. Static variable destruction is separated out for this reason (we already do static variable destruction separately for normal functions, so we only need to handle main scripts). Closes GH-5595.
show more ...
|
#
5d160e30 |
| 17-Feb-2021 |
Nikita Popov |
Fix static variable behavior with inheritance When a method is inherited, the static variables will now always use the initial values, rather than the values at the time of inheritan
Fix static variable behavior with inheritance When a method is inherited, the static variables will now always use the initial values, rather than the values at the time of inheritance. As such, behavior no longer depends on whether inheritance happens before or after a method has been called. This is implemented by always keeping static_variables as the original values, and static_variables_ptr as the modified copy. Closes GH-6705.
show more ...
|
#
15f713bd |
| 15-Feb-2021 |
Dmitry Stogov |
Persist class name before methods, because it may be used insted of "self" |
#
dcf38922 |
| 11-Feb-2021 |
Dmitry Stogov |
Avoid useless SHM data duplication |
#
a8f6d44c |
| 10-Feb-2021 |
Dmitry Stogov |
Fixed map_ptr slot sharing for trait/self |
#
6aea64c4 |
| 10-Feb-2021 |
Dmitry Stogov |
Reuse single map_ptr slot for indentical class names |
#
4b79dba9 |
| 09-Feb-2021 |
Dmitry Stogov |
Added Inheritance Cache. This is a new transparent technology that eliminates overhead of PHP class inheritance. PHP classes are compiled and cached (by opcahce) separately, howeve
Added Inheritance Cache. This is a new transparent technology that eliminates overhead of PHP class inheritance. PHP classes are compiled and cached (by opcahce) separately, however their "linking" was done at run-time - on each request. The process of "linking" may involve a number of compatibility checks and borrowing methods/properties/constants form parent and traits. This takes significant time, but the result is the same on each request. Inheritance Cache performs "linking" for unique set of all the depending classes (parent, interfaces, traits, property types, method types involved into compatibility checks) once and stores result in opcache shared memory. As a part of the this patch, I removed limitations for immutable classes (unresolved constants, typed properties and covariant type checks). So now all classes stored in opcache are "immutable". They may be lazily loaded into process memory, if necessary, but this usually occurs just once (on first linking). The patch shows 8% improvement on Symphony "Hello World" app.
show more ...
|
#
b3bbb8fe |
| 19-Jan-2021 |
Dmitry Stogov |
Mark classes cached by opcache by ZEND_ACC_CACHED flag and prevent useless copying and desrpoying of immutable data. |
#
3e01f5af |
| 15-Jan-2021 |
Nikita Popov |
Replace zend_bool uses with bool We're starting to see a mix between uses of zend_bool and bool. Replace all usages with the standard bool type everywhere. Of course, zend_bool
Replace zend_bool uses with bool We're starting to see a mix between uses of zend_bool and bool. Replace all usages with the standard bool type everywhere. Of course, zend_bool is retained as an alias.
show more ...
|
#
1a44599d |
| 12-Jan-2021 |
Dmitry Stogov |
Always use CG(arena) for unin type lists |
#
7794925b |
| 04-Nov-2020 |
Nikita Popov |
Assert that references are not persisted There should not be any need to persist references, and it's unlikely that persisting a reference will behave correctly at runtime, because w
Assert that references are not persisted There should not be any need to persist references, and it's unlikely that persisting a reference will behave correctly at runtime, because we don't have a concept of an immutable reference.
show more ...
|
#
14c42c69 |
| 03-Nov-2020 |
Nikita Popov |
Fix persisting property info table with internal parent If the property info comes from an internal parent, we won't have an xlat entry for it. Leave it alone in that case. |
#
7620ea15 |
| 03-Sep-2020 |
Nikita Popov |
Don't intern compiled_filename For php-ast interning the file name is an effective memory leak, see php-ast#134. I don't think there's any reason to do this. At some point this
Don't intern compiled_filename For php-ast interning the file name is an effective memory leak, see php-ast#134. I don't think there's any reason to do this. At some point this was needed due to bugs in the interned string mechanism that caused issues if the string was later interned, e.g. through a __FILE__ reference. These issues have since been resolved. In conjunction with the filenames_table removal in c4016ecd446ef26bb3dc77735b6e441e151ea985 this means that filenames now need to be refcounted like normal strings. In particular the filename reference in op_arrays and CEs are refcounted.
show more ...
|
Revision tags: php-7.4.6, php-7.2.31, php-7.4.6RC1, php-7.3.18RC1, php-7.2.30, php-7.4.5, php-7.3.17 |
|
#
d92229d8 |
| 06-Apr-2020 |
Nikita Popov |
Implement named parameters From an engine perspective, named parameters mainly add three concepts: * The SEND_* opcodes now accept a CONST op2, which is the argument nam
Implement named parameters From an engine perspective, named parameters mainly add three concepts: * The SEND_* opcodes now accept a CONST op2, which is the argument name. For now, it is looked up by linear scan and runtime cached. * This may leave UNDEF arguments on the stack. To avoid having to deal with them in other places, a CHECK_UNDEF_ARGS opcode is used to either replace them with defaults, or error. * For variadic functions, EX(extra_named_params) are collected and need to be freed based on ZEND_CALL_HAS_EXTRA_NAMED_PARAMS. RFC: https://wiki.php.net/rfc/named_params Closes GH-5357.
show more ...
|
#
9bf11983 |
| 24-May-2020 |
Ilija Tovilo |
Implement nullsafe ?-> operator RFC: https://wiki.php.net/rfc/nullsafe_operator Closes GH-5619. Co-authored-by: Nikita Popov <nikita.ppv@gmail.com> |
#
a1fee87c |
| 16-Jul-2020 |
George Peter Banyard |
Drop useless zend_accel_script_persistable() function |
#
b702ad14 |
| 14-Jul-2020 |
Nikita Popov |
Fix preloading of union typed property inherited from internal class Tricky edge case: We inherit a property from an internal class, in which case no property duplication takes place. We
Fix preloading of union typed property inherited from internal class Tricky edge case: We inherit a property from an internal class, in which case no property duplication takes place. We should not try to persist the property info in that case. This didn't really matter previously, but now that the property has some non-interned owned data (the type), we need to make sure we don't try to free that.
show more ...
|
#
7e6b2e2e |
| 14-Jul-2020 |
Nikita Popov |
Check for name vs ce in a few more places The type lists may contain CEs, we should not assume they only contain names. |
#
9fa1d133 |
| 09-Apr-2020 |
Ilija Tovilo |
Implement match expression RFC: https://wiki.php.net/rfc/match_expression_v2 Closes GH-5371. |