From 4ec11a55f428bc7e70f2a00c5dac11d964c9d4d9 Mon Sep 17 00:00:00 2001 From: Edmond <1571649+EdmondDantes@users.noreply.github.com> Date: Thu, 10 Jul 2025 23:27:16 +0300 Subject: [PATCH 1/5] #25: Add fiber destructor edge case --- tests/edge_cases/007-fiber-destructors.phpt | 52 +++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tests/edge_cases/007-fiber-destructors.phpt diff --git a/tests/edge_cases/007-fiber-destructors.phpt b/tests/edge_cases/007-fiber-destructors.phpt new file mode 100644 index 0000000..e2c30ed --- /dev/null +++ b/tests/edge_cases/007-fiber-destructors.phpt @@ -0,0 +1,52 @@ +--TEST-- +Fibers in destructors 006: multiple GC runs +--FILE-- +self = $this; + } + public function __destruct() { + $id = self::$counter++; + printf("%d: Start destruct\n", $id); + if ($id === 0) { + global $f2; + $f2 = Fiber::getCurrent(); + Fiber::suspend(new stdClass); + } + printf("%d: End destruct\n", $id); + } +} + +$f = new Fiber(function () { + new Cycle(); + new Cycle(); + gc_collect_cycles(); +}); + +$f->start(); + +new Cycle(); +new Cycle(); +gc_collect_cycles(); + +$f2->resume(); + +?> +--EXPECT-- +0: Start destruct +1: Start destruct +1: End destruct +2: Start destruct +2: End destruct +3: Start destruct +3: End destruct +0: End destruct +Shutdown From 80e3a5a476100a793e292bd2cad39a96439086d8 Mon Sep 17 00:00:00 2001 From: Edmond <1571649+EdmondDantes@users.noreply.github.com> Date: Thu, 10 Jul 2025 23:28:19 +0300 Subject: [PATCH 2/5] #25: Add fiber destructor edge case --- tests/edge_cases/007-fiber-destructors.phpt | 52 --------------------- 1 file changed, 52 deletions(-) delete mode 100644 tests/edge_cases/007-fiber-destructors.phpt diff --git a/tests/edge_cases/007-fiber-destructors.phpt b/tests/edge_cases/007-fiber-destructors.phpt deleted file mode 100644 index e2c30ed..0000000 --- a/tests/edge_cases/007-fiber-destructors.phpt +++ /dev/null @@ -1,52 +0,0 @@ ---TEST-- -Fibers in destructors 006: multiple GC runs ---FILE-- -self = $this; - } - public function __destruct() { - $id = self::$counter++; - printf("%d: Start destruct\n", $id); - if ($id === 0) { - global $f2; - $f2 = Fiber::getCurrent(); - Fiber::suspend(new stdClass); - } - printf("%d: End destruct\n", $id); - } -} - -$f = new Fiber(function () { - new Cycle(); - new Cycle(); - gc_collect_cycles(); -}); - -$f->start(); - -new Cycle(); -new Cycle(); -gc_collect_cycles(); - -$f2->resume(); - -?> ---EXPECT-- -0: Start destruct -1: Start destruct -1: End destruct -2: Start destruct -2: End destruct -3: Start destruct -3: End destruct -0: End destruct -Shutdown From bd219ac61d79e8665edbc8b563ca553e3ad04fb4 Mon Sep 17 00:00:00 2001 From: Edmond <1571649+EdmondDantes@users.noreply.github.com> Date: Thu, 10 Jul 2025 23:29:08 +0300 Subject: [PATCH 3/5] #25: Add fiber destructor edge case --- tests/gc/013-gc-fiber-destructors.phpt | 52 ++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tests/gc/013-gc-fiber-destructors.phpt diff --git a/tests/gc/013-gc-fiber-destructors.phpt b/tests/gc/013-gc-fiber-destructors.phpt new file mode 100644 index 0000000..e2c30ed --- /dev/null +++ b/tests/gc/013-gc-fiber-destructors.phpt @@ -0,0 +1,52 @@ +--TEST-- +Fibers in destructors 006: multiple GC runs +--FILE-- +self = $this; + } + public function __destruct() { + $id = self::$counter++; + printf("%d: Start destruct\n", $id); + if ($id === 0) { + global $f2; + $f2 = Fiber::getCurrent(); + Fiber::suspend(new stdClass); + } + printf("%d: End destruct\n", $id); + } +} + +$f = new Fiber(function () { + new Cycle(); + new Cycle(); + gc_collect_cycles(); +}); + +$f->start(); + +new Cycle(); +new Cycle(); +gc_collect_cycles(); + +$f2->resume(); + +?> +--EXPECT-- +0: Start destruct +1: Start destruct +1: End destruct +2: Start destruct +2: End destruct +3: Start destruct +3: End destruct +0: End destruct +Shutdown From 5bae9f0ead405b0bd9b643258765d70b7284269b Mon Sep 17 00:00:00 2001 From: Edmond <1571649+EdmondDantes@users.noreply.github.com> Date: Fri, 11 Jul 2025 08:07:41 +0300 Subject: [PATCH 4/5] #25: + enable-address-sanitizer --- .github/workflows/build-cross-platform.yml | 2 ++ .github/workflows/build.yml | 1 + 2 files changed, 3 insertions(+) diff --git a/.github/workflows/build-cross-platform.yml b/.github/workflows/build-cross-platform.yml index ce7efb6..b2c561e 100644 --- a/.github/workflows/build-cross-platform.yml +++ b/.github/workflows/build-cross-platform.yml @@ -135,6 +135,7 @@ jobs: --with-config-file-path=/etc \ --with-config-file-scan-dir=/etc/php.d \ --with-pdo-firebird \ + --enable-address-sanitizer \ --enable-async - name: Build PHP @@ -309,6 +310,7 @@ jobs: --enable-inifile \ --with-config-file-path=/usr/local/etc \ --with-config-file-scan-dir=/usr/local/etc/php.d \ + --enable-address-sanitizer \ --enable-async - name: Build PHP (macOS) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7c13dbf..676d5da 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -134,6 +134,7 @@ jobs: --with-config-file-path=/etc \ --with-config-file-scan-dir=/etc/php.d \ --with-pdo-firebird \ + --enable-address-sanitizer \ --enable-async - name: Build PHP From b6d70d9edf1106975721876ce437de4f2c352d77 Mon Sep 17 00:00:00 2001 From: Edmond <1571649+EdmondDantes@users.noreply.github.com> Date: Fri, 11 Jul 2025 08:08:41 +0300 Subject: [PATCH 5/5] #25: + enable-address-sanitizer --- .github/workflows/build-cross-platform.yml | 6 +++--- .github/workflows/build.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-cross-platform.yml b/.github/workflows/build-cross-platform.yml index b2c561e..374323e 100644 --- a/.github/workflows/build-cross-platform.yml +++ b/.github/workflows/build-cross-platform.yml @@ -166,7 +166,7 @@ jobs: --no-progress \ --offline \ --show-diff \ - --show-slow 2000 \ + --show-slow 4000 \ --set-timeout 120 \ --repeat 2 @@ -344,7 +344,7 @@ jobs: --no-progress ^ --offline ^ --show-diff ^ - --show-slow 2000 ^ + --show-slow 4000 ^ --set-timeout 120 ^ --repeat 2 shell: cmd @@ -366,6 +366,6 @@ jobs: --no-progress \ --offline \ --show-diff \ - --show-slow 2000 \ + --show-slow 4000 \ --set-timeout 120 \ --repeat 2 \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 676d5da..ba5eac7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -165,6 +165,6 @@ jobs: --no-progress \ --offline \ --show-diff \ - --show-slow 2000 \ + --show-slow 4000 \ --set-timeout 120 \ --repeat 2 \ No newline at end of file