From 23641ec94eb1e60ae461a9acbf74f54489f95393 Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Thu, 15 Aug 2024 16:02:58 -0400 Subject: [PATCH 1/2] fix race condition --- src/StaticCaching/NoCache/StringFragment.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/StaticCaching/NoCache/StringFragment.php b/src/StaticCaching/NoCache/StringFragment.php index 4dc30258631..5ace736ed2e 100644 --- a/src/StaticCaching/NoCache/StringFragment.php +++ b/src/StaticCaching/NoCache/StringFragment.php @@ -4,6 +4,7 @@ use Statamic\Facades\File; use Statamic\Support\Arr; +use Statamic\Support\Str; class StringFragment { @@ -27,22 +28,22 @@ public function render(): string view()->addNamespace('nocache', $this->directory); File::makeDirectory($this->directory); - $path = $this->createTemporaryView(); + $path = $this->createTemporaryView($view = $this->region.Str::random()); $this->data['__frontmatter'] = Arr::pull($this->data, 'view', []); - $rendered = view('nocache::'.$this->region, $this->data)->render(); + $rendered = view('nocache::'.$view, $this->data)->render(); File::delete($path); return $rendered; } - private function createTemporaryView(): string + private function createTemporaryView($view): string { $path = vsprintf('%s/%s.%s', [ $this->directory, - $this->region, + $view, $this->extension, ]); From cf2119b97cb8fbdb689217b78d5a72a8d1bb7a3f Mon Sep 17 00:00:00 2001 From: Jason Varga Date: Thu, 15 Aug 2024 16:03:19 -0400 Subject: [PATCH 2/2] avoid double file io --- src/StaticCaching/NoCache/StringFragment.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/StaticCaching/NoCache/StringFragment.php b/src/StaticCaching/NoCache/StringFragment.php index 5ace736ed2e..fd9f22eef1c 100644 --- a/src/StaticCaching/NoCache/StringFragment.php +++ b/src/StaticCaching/NoCache/StringFragment.php @@ -47,9 +47,7 @@ private function createTemporaryView($view): string $this->extension, ]); - if (! File::exists($path)) { - File::put($path, $this->contents); - } + File::put($path, $this->contents); return $path; }