Skip to content

Commit 8755e2a

Browse files
committed
Рефакторинг.
1 parent 5f47566 commit 8755e2a

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

lib/BaseRoutesConfigurator.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use Symfony\Component\Routing\RouteCollection;
1818
use Symfony\Component\Routing\Router;
1919
use Symfony\Component\Routing\RouterInterface;
20+
use Throwable;
2021

2122
/**
2223
* Class BaseRoutesConfigurator
@@ -191,10 +192,45 @@ private function warmUpCache() : void
191192
@mkdir($this->cacheDir, 0777);
192193
}
193194

195+
// Блокировка на предмет конкурентных запросов.
196+
$lockFile = $this->cacheDir . '/route_collection.lock';
197+
198+
// Silence E_WARNING to ignore "include" failures - don't use "@" to prevent silencing fatal errors
199+
$errorLevel = error_reporting(\E_ALL ^ \E_WARNING);
200+
201+
$lock = false;
202+
try {
203+
if ($lock = fopen($lockFile, 'w')) {
204+
flock($lock, \LOCK_EX | \LOCK_NB, $wouldBlock);
205+
if (!flock($lock, $wouldBlock ? \LOCK_SH : \LOCK_EX)) {
206+
fclose($lock);
207+
@unlink($lockFile);
208+
$lock = null;
209+
}
210+
} else {
211+
// Если в файл уже что-то пишется
212+
flock($lock, \LOCK_UN);
213+
fclose($lock);
214+
@unlink($lockFile);
215+
216+
return;
217+
218+
}
219+
} catch (Throwable $e) {
220+
} finally {
221+
error_reporting($errorLevel);
222+
}
223+
194224
file_put_contents(
195225
$this->cacheDir . '/route_collection.json',
196226
serialize(static::$router->getRouteCollection())
197227
);
228+
229+
if ($lock) {
230+
flock($lock, \LOCK_UN);
231+
fclose($lock);
232+
@unlink($lockFile);
233+
}
198234
}
199235

200236
static::$router->getGenerator(); // Трюк по созданию кэша.

0 commit comments

Comments
 (0)