Skip to content

Commit fbde6dd

Browse files
[1.x] Fixes memory leak on Translator implementation (#416)
* Fixes memory leak on translator keys * Apply fixes from StyleCI * Bumps framework dependency Co-authored-by: Taylor Otwell <[email protected]>
1 parent 750a072 commit fbde6dd

File tree

4 files changed

+62
-1
lines changed

4 files changed

+62
-1
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
],
1616
"require": {
1717
"php": "^8.0",
18-
"laravel/framework": "^8.62",
18+
"laravel/framework": "^8.70",
1919
"laminas/laminas-diactoros": "^2.5",
2020
"laravel/serializable-closure": "^1.0",
2121
"symfony/psr-http-message-bridge": "^2.0"

src/Concerns/ProvidesDefaultConfigurationOptions.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public static function prepareApplicationForNextOperation(): array
4848
\Laravel\Octane\Listeners\FlushDatabaseQueryLog::class,
4949
\Laravel\Octane\Listeners\FlushLogContext::class,
5050
\Laravel\Octane\Listeners\FlushArrayCache::class,
51+
\Laravel\Octane\Listeners\FlushTranslatorCache::class,
5152

5253
// First-Party Packages...
5354
\Laravel\Octane\Listeners\PrepareInertiaForNextOperation::class,
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace Laravel\Octane\Listeners;
4+
5+
use Illuminate\Support\NamespacedItemResolver;
6+
7+
class FlushTranslatorCache
8+
{
9+
/**
10+
* Handle the event.
11+
*
12+
* @param mixed $event
13+
* @return void
14+
*/
15+
public function handle($event)
16+
{
17+
if (! $event->sandbox->resolved('translator')) {
18+
return;
19+
}
20+
21+
$translator = $event->sandbox->make('translator');
22+
23+
if ($translator instanceof NamespacedItemResolver) {
24+
$translator->flushParsedKeys();
25+
}
26+
}
27+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace Laravel\Octane\Listeners;
4+
5+
use Illuminate\Http\Request;
6+
use Laravel\Octane\Tests\TestCase;
7+
use Mockery;
8+
9+
class FlushTranslatorCacheTest extends TestCase
10+
{
11+
/** @doesNotPerformAssertions */
12+
public function test_parsed_keys_cache_is_flushed()
13+
{
14+
[$app, $worker, $client] = $this->createOctaneContext([
15+
Request::create('/test-translator', 'GET'),
16+
Request::create('/test-translator', 'GET'),
17+
]);
18+
19+
$app['router']->middleware('web')->get('/test-cache', function () {
20+
Validator::make($data, [
21+
'name' => 'string|max:50',
22+
])->validate();
23+
});
24+
25+
$translator = $app['translator'];
26+
27+
$app['translator'] = tap(Mockery::mock($translator), function ($translator) {
28+
$translator->shouldReceive('flushParsedKeys')->twice();
29+
});
30+
31+
$worker->run();
32+
}
33+
}

0 commit comments

Comments
 (0)