lemonldap-ng/lemonldap-ng-common/lib/Lemonldap/NG/Common/Apache/Session/Lock.pm

73 lines
1.3 KiB
Perl

package Lemonldap::NG::Common::Apache::Session::Lock;
use strict;
our $VERSION = '2.1.0';
sub new {
my $class = shift;
my $session = shift;
my $self = {};
$self->{args} = $session->{args};
bless $self, $class;
return $self;
}
sub module {
my $self = shift;
return $self->{args}->{lock_manager};
}
sub cache {
my $self = shift;
return $self->{cache} if $self->{cache};
my $module = $self->{args}->{localStorage};
eval "use $module;";
$self->{cache} = $module->new( $self->{args}->{localStorageOptions} );
return $self->{cache};
}
sub acquire_read_lock {
my $self = shift;
my $session = shift;
# Get session from cache
my $id = $session->{data}->{_session_id};
if ( $self->cache->get($id) ) {
# got session from cache, no need to ask for locks
}
else {
$self->module->acquire_read_lock($session);
}
}
sub acquire_write_lock {
my $self = shift;
my $session = shift;
$self->module->acquire_write_lock($session);
}
sub release_write_lock {
my $self = shift;
my $session = shift;
$self->module->release_write_lock($session);
}
sub release_all_locks {
my $self = shift;
my $session = shift;
$self->module->release_all_locks($session);
}
1;