From a26269c5efe2e8eea9bbe51cb489a994aa1ca9e2 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Wed, 13 Nov 2013 14:21:40 +0100 Subject: [PATCH] Bug 11701: Fix C4::Context::Zconn When calling C4::Context::Zconn twice with different parameters, the same ZOOM::Connection object is returned twice (parameters of 2nd call are not used) This patch fixes that. --- C4/Context.pm | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/C4/Context.pm b/C4/Context.pm index 5a76137..71a0f8c 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -688,14 +688,11 @@ C<$auth> whether this connection has rw access (1) or just r access (0 or NULL) =cut sub Zconn { - my $self=shift; - my $server=shift; - my $async=shift; - my $auth=shift; - my $piggyback=shift; - my $syntax=shift; - if ( defined($context->{"Zconn"}->{$server}) && (0 == $context->{"Zconn"}->{$server}->errcode()) ) { - return $context->{"Zconn"}->{$server}; + my ($self, $server, $async, $auth, $piggyback, $syntax) = @_; + + my $cache_key = join ('::', (map { $_ // '' } ($server, $async, $auth, $piggyback, $syntax))); + if ( defined($context->{"Zconn"}->{$cache_key}) && (0 == $context->{"Zconn"}->{$cache_key}->errcode()) ) { + return $context->{"Zconn"}->{$cache_key}; # No connection object or it died. Create one. }else { # release resources if we're closing a connection and making a new one @@ -704,10 +701,10 @@ sub Zconn { # and make a new one, particularly for a batch job. However, at # first glance it does not look like there's a way to easily check # the basic health of a ZOOM::Connection - $context->{"Zconn"}->{$server}->destroy() if defined($context->{"Zconn"}->{$server}); + $context->{"Zconn"}->{$cache_key}->destroy() if defined($context->{"Zconn"}->{$cache_key}); - $context->{"Zconn"}->{$server} = &_new_Zconn($server,$async,$auth,$piggyback,$syntax); - return $context->{"Zconn"}->{$server}; + $context->{"Zconn"}->{$cache_key} = &_new_Zconn($server,$async,$auth,$piggyback,$syntax); + return $context->{"Zconn"}->{$cache_key}; } } -- 1.7.10.4