/usr/share/perl5/Apache/Session/Lock/Sybase.pm is in libapache-session-perl 1.93-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | ############################################################################
#
# Apache::Session::Lock::Sybase
# Sybase locking for Apache::Session
# Copyright(c) 2003 Oliver Maul (oli@42.nu)
# Distribute under the Perl License
#
############################################################################
package Apache::Session::Lock::Sybase;
use strict;
use DBI;
use vars qw($VERSION);
$VERSION = '1.00';
sub new {
my $class = shift;
return bless {lock => 0, lockid => undef, dbh => undef, mine => 0}, $class;
}
sub acquire_read_lock {
my $self = shift;
my $session = shift;
return if $self->{lock};
if (!defined $self->{dbh}) {
if (defined $session->{args}->{LockHandle}) {
$self->{dbh} = $session->{args}->{LockHandle};
}
else {
$self->{dbh} = DBI->connect(
$session->{args}->{LockDataSource},
$session->{args}->{LockUserName},
$session->{args}->{LockPassword},
{ RaiseError => 1, AutoCommit => 1 }
);
$self->{mine} = 1;
}
}
local $self->{dbh}->{RaiseError} = 1;
$self->{lockid} = "Apache-Session-$session->{data}->{_session_id}";
my $sth = $self->{dbh}->prepare(q{sp_getapplock @Resource = '}.$self->{lockid}.q{',@LockMode='Exclusive',@LockOwner='Session',@LockTimeout = '3600000'});
$sth->execute() || die $DBI::errstr;
$self->{lock} = 1;
}
sub acquire_write_lock {
$_[0]->acquire_read_lock($_[1]);
}
sub release_read_lock {
my $self = shift;
if ($self->{lock}) {
local $self->{dbh}->{RaiseError} = 1;
my $sth = $self->{dbh}->prepare(q{sp_releaseapplock @Resource='}.$self->{lockid}.q{',@Lookowner='Session'});
$sth->execute() || die $DBI::errstr;
$self->{lock} = 0;
}
}
sub release_write_lock {
$_[0]->release_read_lock;
}
sub release_all_locks {
$_[0]->release_read_lock;
}
sub DESTROY {
my $self = shift;
$self->release_all_locks;
if ($self->{mine}) {
$self->{dbh}->disconnect;
}
}
1;
=pod
=head1 NAME
Apache::Session::Lock::Sybase - Provides mutual exclusion using Sybase
=head1 SYNOPSIS
use Apache::Session::Lock::Sybase;
my $locker = new Apache::Session::Lock::Sybase;
$locker->acquire_read_lock($ref);
$locker->acquire_write_lock($ref);
$locker->release_read_lock($ref);
$locker->release_write_lock($ref);
$locker->release_all_locks($ref);
=head1 DESCRIPTION
Apache::Session::Lock::Sybase fulfills the locking interface of
Apache::Session. Mutual exclusion is achieved through the use of Sybase's
sp_getapplock and sp_releaseapplock functions. Sybase does not support the
notion
of read and write locks, so this module only supports exclusive locks. When
you request a shared read lock, it is instead promoted to an exclusive
write lock.
=head1 CONFIGURATION
The module must know how to connect to your MySQL database to acquire locks.
You must provide a datasource name, a user name, and a password. These options
are passed in the usual Apache::Session style, and are very similar to the
options for Apache::Session::Store::Sybase. Example:
tie %hash, 'Apache::Session::Sybase', $id, {
LockDataSource => 'dbi:sybase:database',
LockUserName => 'database_user',
LockPassword => 'K00l'
};
Instead, you may pass in an already opened DBI handle to your database.
tie %hash, 'Apache::Session::Sybase', $id, {
LockHandle => $dbh
};
=head1 AUTHOR
This module was written by Oliver Maul <oli@42.nu>.
=head1 SEE ALSO
L<Apache::Session>
|