From d88e167d9cc494a9f5c929f88325a9cbdfbb65d5 Mon Sep 17 00:00:00 2001 From: Asmir Mustafic Date: Fri, 3 Jul 2020 09:27:49 +0200 Subject: mitigate cyclic reference between output rules and the traverser objects --- src/HTML5.php | 5 ++++- src/HTML5/Serializer/OutputRules.php | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/HTML5.php b/src/HTML5.php index 94faa1e..c857145 100644 --- a/src/HTML5.php +++ b/src/HTML5.php @@ -212,7 +212,10 @@ class HTML5 $trav = new Traverser($dom, $stream, $rules, $options); $trav->walk(); - + /* + * release the traverser to avoid cyclic references and allow PHP to free memory without waiting for gc_collect_cycles + */ + $rules->unsetTraverser(); if ($close) { fclose($stream); } diff --git a/src/HTML5/Serializer/OutputRules.php b/src/HTML5/Serializer/OutputRules.php index 1c4e892..ec467f2 100644 --- a/src/HTML5/Serializer/OutputRules.php +++ b/src/HTML5/Serializer/OutputRules.php @@ -182,6 +182,13 @@ class OutputRules implements RulesInterface return $this; } + public function unsetTraverser() + { + $this->traverser = null; + + return $this; + } + public function document($dom) { $this->doctype(); -- cgit v1.2.3