From: Dirk Koopman Date: Fri, 9 Mar 2012 22:37:50 +0000 (+0000) Subject: fix errors in DXUser deserialising Users X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=8423d02ad83db3cdc9504dc574c3d16d7c6a3092;p=spider.git fix errors in DXUser deserialising Users --- diff --git a/perl/DXUser.pm b/perl/DXUser.pm index 84b6df3d..d7a43326 100644 --- a/perl/DXUser.pm +++ b/perl/DXUser.pm @@ -368,30 +368,37 @@ sub get # is it in the LRU cache? my $ref = $lru->get($call); - return $ref if $ref && ref $ref eq 'DXUser'; + return $ref if $ref && UNIVERSAL::isa($ref, 'DXUser'); # search for it if ($v4) { if ($data = _select($call)) { $ref = bless decode_json($data), 'DXUser'; + unless ($ref) { + dbg("DXUser::get: no reference returned from decode of $call $!"); + return undef; + } } } else { unless ($dbm->get($call, $data)) { $ref = decode($data); + unless ($ref) { + dbg("DXUser::get: no reference returned from decode of $call $!"); + return undef; + } } } if ($ref) { - if (UNIVERSAL::isa($ref, 'DXUser')) { + if (!UNIVERSAL::isa($ref, 'DXUser')) { dbg("DXUser::get: got strange answer from decode of $call". ref $ref. " ignoring"); return undef; } + # we have a reference and it *is* a DXUser - } else { - dbg("DXUser::get: no reference returned from decode of $call $!"); - return undef; + $lru->put($call, $ref); + return $ref; } - $lru->put($call, $ref); return undef; }