Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 440322e

Browse files
sunfabpot
authored andcommitted
Fixed self-reference in 'service_container' service breaks garbage collection (and clone).
1 parent 497c875 commit 440322e

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

src/Symfony/Component/DependencyInjection/Container.php

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,6 @@ public function __construct(ParameterBagInterface $parameterBag = null)
9393
$this->scopeChildren = array();
9494
$this->scopedServices = array();
9595
$this->scopeStacks = array();
96-
97-
$this->set('service_container', $this);
9896
}
9997

10098
/**
@@ -204,6 +202,12 @@ public function set($id, $service, $scope = self::SCOPE_CONTAINER)
204202

205203
$id = strtolower($id);
206204

205+
if ('service_container' === $id) {
206+
// BC: 'service_container' is no longer a self-reference but always
207+
// $this, so ignore this call.
208+
// @todo Throw InvalidArgumentException in next major release.
209+
return;
210+
}
207211
if (self::SCOPE_CONTAINER !== $scope) {
208212
if (!isset($this->scopedServices[$scope])) {
209213
throw new RuntimeException(sprintf('You cannot set service "%s" of inactive scope.', $id));
@@ -240,6 +244,10 @@ public function has($id)
240244
{
241245
$id = strtolower($id);
242246

247+
if ('service_container' === $id) {
248+
return true;
249+
}
250+
243251
return isset($this->services[$id])
244252
|| array_key_exists($id, $this->services)
245253
|| isset($this->aliases[$id])
@@ -276,6 +284,9 @@ public function get($id, $invalidBehavior = self::EXCEPTION_ON_INVALID_REFERENCE
276284
if ($strtolower) {
277285
$id = strtolower($id);
278286
}
287+
if ('service_container' === $id) {
288+
return $this;
289+
}
279290
if (isset($this->aliases[$id])) {
280291
$id = $this->aliases[$id];
281292
}
@@ -347,6 +358,12 @@ public function initialized($id)
347358
{
348359
$id = strtolower($id);
349360

361+
if ('service_container' === $id) {
362+
// BC: 'service_container' was a synthetic service previously.
363+
// @todo Change to false in next major release.
364+
return true;
365+
}
366+
350367
return isset($this->services[$id]) || array_key_exists($id, $this->services);
351368
}
352369

@@ -364,6 +381,7 @@ public function getServiceIds()
364381
$ids[] = self::underscore($match[1]);
365382
}
366383
}
384+
$ids[] = 'service_container';
367385

368386
return array_unique(array_merge($ids, array_keys($this->services)));
369387
}

0 commit comments

Comments
 (0)