summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-10-03 16:01:36 -0400
committerJesse Luehrs <doy@tozt.net>2013-10-03 16:01:36 -0400
commit4a0943dadf0253463847e987f76fc3a0c9505b71 (patch)
tree18a78bdb007b514891d0d6476518b9df24c847a0 /lib
parent463f70ef1f67d7de54414712a77ea45ebe700b39 (diff)
downloadbread-board-declare-4a0943dadf0253463847e987f76fc3a0c9505b71.tar.gz
bread-board-declare-4a0943dadf0253463847e987f76fc3a0c9505b71.zip
remove some memory cycles (Roman Daniel)
Diffstat (limited to 'lib')
-rw-r--r--lib/Bread/Board/Declare/Meta/Role/Attribute/Service.pm3
-rw-r--r--lib/Bread/Board/Declare/Role/Object.pm3
2 files changed, 4 insertions, 2 deletions
diff --git a/lib/Bread/Board/Declare/Meta/Role/Attribute/Service.pm b/lib/Bread/Board/Declare/Meta/Role/Attribute/Service.pm
index 935e5cb..b1db7fd 100644
--- a/lib/Bread/Board/Declare/Meta/Role/Attribute/Service.pm
+++ b/lib/Bread/Board/Declare/Meta/Role/Attribute/Service.pm
@@ -170,10 +170,11 @@ after attach_to_class => sub {
);
}
else {
+ my $name = $self->name;
$service = Bread::Board::Declare::BlockInjection->new(
%params,
block => sub {
- die "Attribute " . $self->name . " did not specify a service."
+ die "Attribute $name did not specify a service."
. " It must be given a value through the constructor or"
. " writer method before it can be resolved."
},
diff --git a/lib/Bread/Board/Declare/Role/Object.pm b/lib/Bread/Board/Declare/Role/Object.pm
index ad1f80a..1c5f244 100644
--- a/lib/Bread/Board/Declare/Role/Object.pm
+++ b/lib/Bread/Board/Declare/Role/Object.pm
@@ -23,11 +23,12 @@ after BUILD => sub {
);
for my $service ($meta->get_all_services) {
if ($service->isa('Bread::Board::Declare::BlockInjection')) {
+ Scalar::Util::weaken(my $weakself = $self);
my $block = $service->block;
$self->add_service(
$service->clone(
block => sub {
- $block->(@_, $self)
+ $block->(@_, $weakself)
},
)
);