mirror of
https://anongit.gentoo.org/git/repo/gentoo.git
synced 2025-12-19 00:18:26 +00:00
Bug: https://bugs.gentoo.org/957101 Signed-off-by: Jaco Kroon <jaco@uls.co.za> Part-of: https://github.com/gentoo/gentoo/pull/42518 Signed-off-by: Sam James <sam@gentoo.org>
88 lines
3.3 KiB
Diff
88 lines
3.3 KiB
Diff
Derived from: https://github.com/krakjoe/parallel/pull/339
|
|
Just removed tests.
|
|
From 75d1359e671fbb05c813779a0ad885eabc636633 Mon Sep 17 00:00:00 2001
|
|
From: Florian Engelhardt <flo@dotbox.org>
|
|
Date: Wed, 9 Apr 2025 10:14:12 +0200
|
|
Subject: [PATCH] Crash less and allow more cyclomatic refs (#339)
|
|
|
|
---
|
|
src/cache.c | 17 +++++++++++-
|
|
src/scheduler.c | 9 +++++--
|
|
8 files changed, 132 insertions(+), 8 deletions(-)
|
|
create mode 100644 tests/base/072-bootstrap.php
|
|
|
|
diff --git a/src/cache.c b/src/cache.c
|
|
index 6c3dee9..afbfb6d 100644
|
|
--- a/src/cache.c
|
|
+++ b/src/cache.c
|
|
@@ -370,11 +370,12 @@ zend_function* php_parallel_cache_closure(const zend_function *source, zend_func
|
|
memcpy(closure, cache, sizeof(zend_op_array));
|
|
}
|
|
|
|
- if (closure->op_array.static_variables) {
|
|
+ if (source->op_array.static_variables) {
|
|
HashTable *statics =
|
|
ZEND_MAP_PTR_GET(
|
|
source->op_array.static_variables_ptr);
|
|
|
|
+ if (statics) {
|
|
closure->op_array.static_variables =
|
|
php_parallel_copy_hash_ctor(statics, 1);
|
|
|
|
@@ -387,8 +388,22 @@ zend_function* php_parallel_cache_closure(const zend_function *source, zend_func
|
|
closure->op_array.static_variables_ptr,
|
|
&closure->op_array.static_variables);
|
|
#endif
|
|
+ }
|
|
}
|
|
|
|
+#if PHP_VERSION_ID >= 80100
|
|
+ if (source->op_array.num_dynamic_func_defs) {
|
|
+ uint32_t it = 0;
|
|
+ closure->op_array.dynamic_func_defs = php_parallel_cache_copy_mem(
|
|
+ source->op_array.dynamic_func_defs,
|
|
+ sizeof(zend_op_array*) * source->op_array.num_dynamic_func_defs);
|
|
+ while (it < source->op_array.num_dynamic_func_defs) {
|
|
+ closure->op_array.dynamic_func_defs[it] = (zend_op_array*) php_parallel_cache_closure((zend_function*) source->op_array.dynamic_func_defs[it], NULL);
|
|
+ it++;
|
|
+ }
|
|
+ }
|
|
+#endif
|
|
+
|
|
return closure;
|
|
} /* }}} */
|
|
|
|
diff --git a/src/scheduler.c b/src/scheduler.c
|
|
index a66673b..de3ee11 100644
|
|
--- a/src/scheduler.c
|
|
+++ b/src/scheduler.c
|
|
@@ -33,6 +33,8 @@ static zend_always_inline int php_parallel_scheduler_list_delete(void *lhs, void
|
|
static void php_parallel_schedule_free_function(zend_function *function) {
|
|
if (function->op_array.static_variables) {
|
|
php_parallel_copy_hash_dtor(function->op_array.static_variables, 1);
|
|
+ ZEND_MAP_PTR_SET(function->op_array.static_variables_ptr, NULL);
|
|
+ function->op_array.static_variables = NULL;
|
|
}
|
|
|
|
#if PHP_VERSION_ID >= 80100
|
|
@@ -245,6 +247,8 @@ static void php_parallel_scheduler_clean(zend_function *function) {
|
|
|
|
if (!(GC_FLAGS(statics) & IS_ARRAY_IMMUTABLE)) {
|
|
zend_array_destroy(statics);
|
|
+ ZEND_MAP_PTR_SET(function->op_array.static_variables_ptr, NULL);
|
|
+ function->op_array.static_variables = NULL;
|
|
}
|
|
}
|
|
|
|
@@ -254,8 +258,9 @@ static void php_parallel_scheduler_clean(zend_function *function) {
|
|
|
|
while (it < function->op_array.num_dynamic_func_defs) {
|
|
php_parallel_scheduler_clean(
|
|
- (zend_function*) function->op_array.dynamic_func_defs[it]);
|
|
- it++;
|
|
+ (zend_function*) function->op_array.dynamic_func_defs[it]);
|
|
+ pefree(function->op_array.dynamic_func_defs[it],1);
|
|
+ it++;
|
|
}
|
|
}
|
|
#endif
|