From f3fb375d10d11ca2f728c1c3530ecc74f78e036d Mon Sep 17 00:00:00 2001 From: Pedro Melo Date: Sat, 28 Feb 2015 07:49:45 +0000 Subject: [PATCH] Fix memory leak, circular reference on publish() Reported, analised and fixed by Tiago Quintela and Nuno Mota. Signed-off-by: Pedro Melo --- lib/AnyEvent/NSQ/Client.pm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/AnyEvent/NSQ/Client.pm b/lib/AnyEvent/NSQ/Client.pm index 5d61374..3f7e3d6 100644 --- a/lib/AnyEvent/NSQ/Client.pm +++ b/lib/AnyEvent/NSQ/Client.pm @@ -38,10 +38,14 @@ sub publish { my $conn = $self->_random_connected_conn; croak "ERROR: there no active connections at this moment," unless $conn; + my @args; if (ref($data[-1]) eq 'CODE' or !defined($data[-1])) { my $cb = pop @data; - push @data, sub { $cb->($self, $topic, \@data, @_) } - if $cb; + + if ($cb) { + my @cb_data = @data; + push @data, sub { $cb->($self, $topic, \@cb_data, @_) } + } } return $conn->publish($topic, @data);