weaken all session refs

This commit is contained in:
Doug Bell 2010-05-31 10:18:45 -05:00
parent 387942e68d
commit cc87552a22
20 changed files with 90 additions and 19 deletions

View file

@ -15,7 +15,7 @@ package WebGUI::Asset;
=cut
use Carp qw( croak confess );
use Scalar::Util qw( blessed );
use Scalar::Util qw( blessed weaken );
use Clone qw(clone);
use JSON;
use HTML::Packer;
@ -1826,6 +1826,7 @@ no revision date is available it will return undef.
sub new {
my ( $class, $session, $assetId, $className, $revisionDate ) = @_;
weaken( $session );
unless (defined $assetId) {
$session->errorHandler->error("Asset constructor new() requires an assetId.");

View file

@ -312,20 +312,22 @@ sub exportBranch {
my $indexFileName = $options->{indexFileName};
my $extrasUploadAction = $options->{extrasUploadAction};
my $rootUrlAction = $options->{rootUrlAction};
my $exportedCount = 0;
my $i18n;
if ( $reportSession ) {
$i18n = WebGUI::International->new($self->session, 'Asset');
}
my $exportedCount = 0;
my $assetIds = $self->exportGetDescendants(undef, $depth);
foreach my $assetId ( @{$assetIds} ) {
my $exportAsset = sub {
my ( $assetId ) = @_;
# Must be created once for each asset, since session is supposed to only handle
# one main asset
my $outputSession = $self->session->duplicate;
my $osGuard = Scope::Guard->new(sub {
$outputSession->close;
$outputSession = undef;
});
my $asset = WebGUI::Asset->new($outputSession, $assetId);
@ -380,6 +382,16 @@ sub exportBranch {
if ( $reportSession ) {
$reportSession->output->print($i18n->get('done'));
}
#use Devel::Cycle;
#warn "CHECKING on " . ref( $asset ) . ' ID: ' . $asset->getId . "\n";
#find_cycle( $asset );
};
my $assetIds = $self->exportGetDescendants(undef, $depth);
foreach my $assetId ( @{$assetIds} ) {
$exportAsset->( $assetId );
}
# handle symlinking
@ -531,6 +543,9 @@ sub exportGetDescendants {
orderByClause => 'assetData.url DESC',
} );
use Data::Dumper;
warn "Assets: " . scalar( @$assetIds );
return $assetIds;
}

View file

@ -17,6 +17,7 @@ package WebGUI::FormValidator;
use strict qw(vars subs);
use WebGUI::HTML;
use WebGUI::Pluggable;
use Scalar::Util qw( weaken );
=head1 NAME
@ -122,7 +123,9 @@ A reference to the current session.
sub new {
my $class = shift;
my $session = shift;
bless {_session=>$session}, $class;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}

View file

@ -21,6 +21,7 @@ use WebGUI::Macro;
use WebGUI::Utility;
use WebGUI::Pluggable;
use WebGUI::International;
use Scalar::Util qw( weaken );
=head1 NAME
@ -1519,6 +1520,7 @@ sub new {
my $class = shift;
$self->{_session} = shift;
weaken( $self->{_session} );
$self->{_groupId} = shift;
my $override = shift;
my $noAdmin = shift;

View file

@ -15,6 +15,7 @@ package WebGUI::SQL;
=cut
use strict;
use Scalar::Util qw( weaken );
use DBI;
use Tie::IxHash;
use WebGUI::SQL::ResultSet;
@ -445,7 +446,9 @@ sub connect {
$dbh->{$paramName} = $paramValue;
}
bless {_dbh=>$dbh, _session=>$session}, $class;
my $self = bless {_dbh=>$dbh, _session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}
#-------------------------------------------------------------------

View file

@ -15,6 +15,7 @@ package WebGUI::Session;
=cut
use strict;
use Scalar::Util qw( weaken );
use WebGUI::Config;
use WebGUI::SQL;
use WebGUI::User;
@ -103,6 +104,7 @@ sub asset {
my $asset = shift;
if ($asset) {
$self->{_asset} = $asset;
weaken( $self->{_asset} );
}
return $self->{_asset};
}
@ -121,7 +123,8 @@ sub close {
# Kill circular references. The literal list is so that the order
# can be explicitly shuffled as necessary.
foreach my $key (qw/_asset _datetime _icon _slave _db _env _form _http _id _output _os _privilege _scratch _setting _stow _style _url _user _var _errorHandler/) {
# XXX Is this necessary when we have weakened session refs?
foreach my $key (qw/_asset _datetime _icon _slave _db _env _form _http _id _output _os _privilege _scratch _setting _stow _style _url _user _var _errorHandler _config /) {
delete $self->{$key};
}
}

View file

@ -19,6 +19,7 @@ use DateTime;
use DateTime::Format::Strptime;
use DateTime::Format::Mail;
use DateTime::TimeZone;
use Scalar::Util qw( weaken );
use Tie::IxHash;
use WebGUI::International;
use WebGUI::Utility;
@ -808,7 +809,9 @@ A reference to the current session.
sub new {
my $class = shift;
my $session = shift;
bless {_session=>$session}, $class;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}
#-------------------------------------------------------------------

View file

@ -17,6 +17,7 @@ package WebGUI::Session::ErrorHandler;
use strict;
use Log::Log4perl;
use Scalar::Util qw( weaken );
#use Apache2::RequestUtil;
use JSON;
use HTML::Entities qw(encode_entities);
@ -161,6 +162,7 @@ The message you wish to add to the log.
sub debug {
my $self = shift;
return unless $self->canShowDebug || $self->getLogger->is_debug;
my $message = shift;
local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1;
$self->getLogger->debug($message);
@ -197,6 +199,7 @@ The message you wish to add to the log.
sub error {
my $self = shift;
return unless $self->canShowDebug || $self->getLogger->is_error;
my $message = shift;
local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1;
$self->getLogger->error($message);
@ -303,6 +306,7 @@ The message you wish to add to the log.
sub info {
my $self = shift;
return unless $self->canShowDebug || $self->getLogger->is_info;
my $message = shift;
local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1;
$self->getLogger->info($message);
@ -326,7 +330,9 @@ sub new {
my $session = shift;
Log::Log4perl->init_once( $session->config->getWebguiRoot."/etc/log.conf" );
my $logger = Log::Log4perl->get_logger($session->config->getFilename);
bless {_queryCount=>0, _logger=>$logger, _session=>$session}, $class;
my $self = bless {_queryCount=>0, _logger=>$logger, _session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}
#----------------------------------------------------------------------------
@ -471,6 +477,7 @@ The message you wish to add to the log.
sub warn {
my $self = shift;
return unless $self->canShowDebug || $self->getLogger->is_warn;
my $message = shift;
local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1;
$self->getLogger->warn($message);

View file

@ -17,6 +17,7 @@ package WebGUI::Session::Http;
use strict;
use WebGUI::Utility;
use Scalar::Util qw( weaken );
=head1 NAME
@ -267,7 +268,9 @@ A reference to the current session.
sub new {
my $class = shift;
my $session = shift;
bless {_session=>$session}, $class;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}

View file

@ -16,6 +16,7 @@ package WebGUI::Session::Icon;
use strict;
use WebGUI::International;
use Scalar::Util qw( weaken );
=head1 NAME
@ -510,7 +511,9 @@ A reference to the current session.
sub new {
my $class = shift;
my $session = shift;
bless {_session=>$session}, $class;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}

View file

@ -17,6 +17,7 @@ package WebGUI::Session::Id;
use strict;
use Digest::MD5;
use Scalar::Util qw( weaken );
use Time::HiRes qw( gettimeofday usleep );
use MIME::Base64;
@ -121,7 +122,9 @@ A reference to the current session.
sub new {
my $class = shift;
my $session = shift;
bless {_session=>$session}, $class;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}
#-------------------------------------------------------------------

View file

@ -16,6 +16,7 @@ package WebGUI::Session::Output;
use strict;
use WebGUI::Macro;
use Scalar::Util qw( weaken );
=head1 NAME
@ -65,7 +66,9 @@ A reference to the current session.
sub new {
my $class = shift;
my $session = shift;
bless {_session=>$session}, $class;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}
#-------------------------------------------------------------------

View file

@ -15,6 +15,7 @@ package WebGUI::Session::Privilege;
=cut
use strict;
use Scalar::Util qw( weaken );
use WebGUI::International;
use WebGUI::Operation::Auth;
@ -145,7 +146,9 @@ A reference to the current session.
sub new {
my $class = shift;
my $session = shift;
bless {_session=>$session}, $class;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}

View file

@ -16,6 +16,7 @@ package WebGUI::Session::Scratch;
use strict;
use WebGUI::International;
use Scalar::Util qw( weaken );
=head1 NAME
@ -191,7 +192,9 @@ sub new {
my $class = shift;
my $session = shift;
my $data = $session->db->buildHashRef("select name,value from userSessionScratch where sessionId=?",[$session->getId], {noOrder => 1});
bless {_session=>$session, _data=>$data}, $class;
my $self = bless {_session=>$session, _data=>$data}, $class;
weaken( $self->{_session} );
return $self;
}
#-------------------------------------------------------------------

View file

@ -15,6 +15,7 @@ package WebGUI::Session::Setting;
=cut
use strict;
use Scalar::Util qw( weaken );
=head1 NAME
@ -146,7 +147,9 @@ sub new {
my $class = shift;
my $session = shift;
my $settings = $session->db->buildHashRef("select * from settings", [], {noOrder => 1});
bless {_settings=>$settings, _session=>$session}, $class;
my $self = bless {_settings=>$settings, _session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}

View file

@ -15,6 +15,7 @@ package WebGUI::Session::Stow;
=cut
use strict;
use Scalar::Util qw( weaken );
=head1 NAME
@ -156,7 +157,9 @@ A reference to the session.
sub new {
my $class = shift;
my $session = shift;
bless {_session=>$session}, $class;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}

View file

@ -17,6 +17,7 @@ package WebGUI::Session::Style;
use strict;
use Tie::CPHash;
use Scalar::Util qw( weaken );
use WebGUI::International;
use WebGUI::Macro;
use WebGUI::Asset::Template;
@ -181,7 +182,9 @@ A reference to the current session.
sub new {
my $class = shift;
my $session = shift;
bless {_session=>$session}, $class;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}
#-------------------------------------------------------------------

View file

@ -18,6 +18,7 @@ package WebGUI::Session::Url;
use strict;
use URI;
use URI::Escape;
use Scalar::Util qw( weaken );
use WebGUI::International;
use WebGUI::Utility;
@ -425,7 +426,9 @@ A reference to the current session.
sub new {
my $class = shift;
my $session = shift;
bless {_session=>$session}, $class;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
return $self;
}
#-------------------------------------------------------------------

View file

@ -15,6 +15,7 @@ package WebGUI::Session::Var;
=cut
use strict;
use Scalar::Util qw( weaken );
=head1 NAME
@ -171,6 +172,7 @@ sub new {
my $class = shift;
my $session = shift;
my $self = bless {_session=>$session}, $class;
weaken( $self->{_session} );
my $sessionId = shift;
my $noFuss = shift;
if ($sessionId eq "") { ##New session

View file

@ -26,6 +26,7 @@ use WebGUI::Shop::AddressBook;
use JSON;
use WebGUI::Exception;
use WebGUI::ProfileField;
use Scalar::Util qw( weaken );
=head1 NAME
@ -1077,6 +1078,7 @@ sub new {
my $self = $cache->get || {};
bless $self, $class;
$self->{_session} = $session;
weaken( $self->{_session} );
unless ($self->{_userId} && $self->{_user}{username}) {
my %user;
tie %user, 'Tie::CPHash';