);
use Arc::Test;
-use Lock qw(:ALL);
+use Lock;
use Posting::_lib qw(
get_all_threads
create_forum_xml_string
if ( $param->{adminDefault}->{Severance}->{severance} ne 'instant'
or $param->{adminDefault}->{Instant}->{execute}
) {
- if (write_lock_file($param->{lockFile}, 1)) {
- if (write_lock_file ($param->{forumFile})) {
+ my $sev = new Lock ($param->{lockFile});
+ if ($sev -> lock(LH_EXCL)) {
+ my $forum = new Lock ($param->{forumFile});
+ if ($forum -> lock (LH_EXCL)) {
my (
$threads,
$last_thread,
$last_message,
$dtd,
undef
- ) = get_all_threads ($param->{forumFile}, KEEP_DELETED);
+ ) = get_all_threads ($forum->filename, KEEP_DELETED);
my $obsolete = get_obsolete_threads ({
parsedThreads => $threads,
);
if ($saved) {
for (@$obsolete) {
- set_master_lock ($param->{messagePath}."t$_.xml") or $failed{$_} = 'could not set master lock';
+ new Lock($param->{messagePath}."t$_.xml")->lock(LH_MASTER) or $failed{$_} = 'could not set master lock';
}
}
- violent_unlock_file ($param->{forumFile}) unless (write_unlock_file ($param->{forumFile}));
+ $forum -> unlock;
if ($saved) {
# now process thread files
my $monthpath = $monthdir . '/';
my $file = $monthpath . "t$tid.xml";
- mkdir $yeardir, 0777 unless (-d $yeardir);
+ mkdir $yeardir unless (-d $yeardir);
if (-d $yeardir) {
- mkdir $monthdir, 0777 unless (-d $monthdir);
+ mkdir $monthdir unless (-d $monthdir);
if (-d $monthdir) {
save_file (
$file,
#
for (grep {not exists($failed{$_})} @$obsolete) {
unlink ($param->{messagePath}."t$_.xml") or $failed{$_} = 'could not delete thread file';
- file_removed ($param->{messagePath}."t$_.xml");
+ #file_removed ($param->{messagePath}."t$_.xml");
}
$cache -> delete_threads (@$obsolete);
$cache -> garbage_collection;
}
}
- else {
- violent_unlock_file ($param->{forumFile});
- }
- violent_unlock_file ($param->{lockFile}) unless (write_unlock_file ($param->{lockFile}));
- }
- else {
- violent_unlock_file ($param->{lockFile});
+ $sev -> unlock;
}
}
# #
# File: shared/Posting/Cache.pm #
# #
-# Authors: André Malo <nd@o3media.de>, 2001-04-21 #
+# Authors: André Malo <nd@o3media.de>, 2001-06-22 #
# #
# Description: Views/Voting Cache class #
# #
use Fcntl;
use File::Path;
-use Lock qw(:ALL);
+use Lock;
################################################################################
#
#
$VERSION = do { my @r =(q$Revision$ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };
-my $O_BINARY = eval 'local $SIG{__DIE__}; O_BINARY';
+my $O_BINARY = eval "O_BINARY";
$O_BINARY = 0 if ($@);
### sub new ####################################################################
}
sub r_add_posting {
my ($self, $handle, $param) = @_;
- local *FILE;
+ my $newfile = new Lock ($self->cachefile($param));
local $\;
unless (-d $self -> threaddir($param)) {
mkdir $self->threaddir($param), 0777 or return;
}
- sysopen (FILE,
- $self->cachefile($param),
- O_WRONLY | O_CREAT | O_TRUNC
- ) or return;
- close FILE or return;
+ $newfile -> open (O_WRONLY | O_CREAT | O_TRUNC) or return;
+ $newfile -> close or return;
my $z;
if (-s $handle) {
'L4' => $param->{posting}, $param->{thread}, 0, 0
) or return;
- release_file ($self->cachefile($param));
+ $newfile -> release;
1;
}
sub add_wrap {
my ($self, $gosub, @param) = @_;
my $status;
+ my $summary = new Lock ($self -> summaryfile);
- unless (write_lock_file ($self->summaryfile)) {
- violent_unlock_file ($self->summaryfile);
- $self->set_error ('could not write-lock summary file '.$self->summaryfile);
+ unless ($summary -> lock (LH_EXCL)) {
+ $self->set_error ('could not write-lock summary file '.$summary -> filename);
}
else {
- local *SUM;
- unless (sysopen (SUM, $self->summaryfile, $O_BINARY | O_APPEND | O_CREAT | O_RDWR)) {
+ unless ($summary -> open($O_BINARY | O_APPEND | O_CREAT | O_RDWR)) {
$self->set_error
- ('could not open to read/write/append summary file '.$self->summaryfile);
+ ('could not open to read/write/append summary file '.$summary->filename);
}
else {
$status = $gosub -> (
$self,
- \*SUM,
+ $summary,
@param
);
- unless (close SUM) {
+ unless ($summary -> close) {
$status=0;
- $self->set_error('could not close summary file '.$self->summaryfile);
+ $self->set_error('could not close summary file '.$summary -> filename);
}
}
- violent_unlock_file ($self->summaryfile) unless (write_unlock_file ($self->summaryfile));
+ $summary -> unlock;
}
# return
sub vote_wrap {
my ($self, $gosub, $param) = @_;
my $status;
+ my $summary = new Lock ($self -> summaryfile);
- unless (write_lock_file ($self->summaryfile)) {
- violent_unlock_file ($self->summaryfile);
- $self->set_error ('could not write-lock summary file '.$self->summaryfile);
+ unless ($summary -> lock (LH_EXCL)) {
+ $self->set_error ('could not write-lock summary file '.$summary -> filename);
}
else {
- local *S;
- unless (sysopen (S, $self->summaryfile, O_RDWR | $O_BINARY)) {
- $self->set_error ('could not open to read/write summary file '.$self->summaryfile);
+ unless ($summary -> open (O_RDWR | $O_BINARY)) {
+ $self->set_error ('could not open to read/write summary file '.$summary -> filename);
}
else {
unless (-d $self->threaddir($param)) {
mkdir $self->threaddir($param), 0777 or return;
}
- my $filename = $self->cachefile($param);
+ my $cache = new Lock ($self->cachefile($param));
- unless (write_lock_file ($filename)) {
- violent_unlock_file ($filename);
- $self->set_error ('could not write-lock cache file '.$filename);
+ unless ($cache -> lock (LH_EXCL)) {
+ $self->set_error ('could not write-lock cache file '.$cache -> filename);
}
else {
- local *CACHE;
- unless (sysopen (CACHE, $filename, O_APPEND | O_CREAT | O_RDWR)) {
- $self->set_error ('could not open to read/write/append cache file '.$filename);
+ unless ($cache -> open (O_APPEND | O_CREAT | O_RDWR)) {
+ $self->set_error ('could not open to read/write/append cache file '.$cache -> filename);
}
else {
$status = $gosub -> (
$self,
- \*S,
- \*CACHE,
+ $summary,
+ $cache,
$param
);
- unless (close CACHE) {
+ unless ($cache -> close) {
$status=0;
- $self->set_error('could not close cache file '.$filename);
+ $self->set_error('could not close cache file '.$cache -> filename);
}
}
- violent_unlock_file ($filename) unless (write_unlock_file ($filename));
+ $cache -> unlock;
}
- unless (close S) {
+ unless ($summary -> close) {
$status=0;
- $self->set_error('could not close summary file '.$self->summaryfile);
+ $self->set_error('could not close summary file '.$summary -> filename);
}
}
- violent_unlock_file ($self->summaryfile) unless (write_unlock_file ($self->summaryfile));
+ $summary -> unlock;
}
# return
sub purge_wrap {
my ($self, $gosub, @param) = @_;
my $status;
- my $filename = $self -> summaryfile . '.temp';
+ my $summary = new Lock ($self -> summaryfile);
- unless (write_lock_file ($self->summaryfile)) {
- violent_unlock_file ($self->summaryfile);
- $self->set_error ('could not write-lock summary file '.$self->summaryfile);
+ unless ($summary -> lock (LH_EXSH)) {
+ $self->set_error ('could not write-lock summary file '.$summary -> filename);
}
else {
- local *TEMP;
- unless (sysopen (TEMP, $filename, O_CREAT | O_WRONLY | O_TRUNC | $O_BINARY)) {
- $self->set_error ('could not open to write temp summary file '.$filename);
+ my $temp = new Lock::Handle ($summary -> filename . '.temp');
+ unless ($temp -> open (O_CREAT | O_WRONLY | O_TRUNC | $O_BINARY)) {
+ $self->set_error ('could not open to write temp summary file '.$temp -> filename);
}
else {
- local *S;
- unless (sysopen (S, $self->summaryfile, O_RDONLY | $O_BINARY)) {
- $self->set_error ('could not open to read summary file '.$self->summaryfile);
+ unless ($summary -> open (O_RDONLY | $O_BINARY)) {
+ $self->set_error ('could not open to read summary file '.$summary -> filename);
}
else {
$status = $gosub -> (
$self,
- \*S,
- \*TEMP,
+ $summary,
+ $temp,
@param
);
- unless (close S) {
+ unless ($summary -> close) {
$status = 0;
- $self->set_error('could not close summary file '.$self->summaryfile);
+ $self->set_error('could not close summary file '.$summary -> filename);
}
}
- unless (close TEMP) {
+ unless ($temp -> close) {
+ $status=0;
+ $self->set_error('could not close temp summary file '.$temp -> filename);
+ }
+ unless ($summary -> lock (LH_EXCL)) {
$status=0;
- $self->set_error('could not close temp summary file '.$filename);
+ $self->set_error ('could not write-lock summary file '.$summary -> filename);
}
if ($status) {
- unless (rename $filename => $self->summaryfile) {
+ unless (rename $temp -> filename => $summary -> filename) {
$status=0;
- $self->set_error('could not rename temp summary file '.$filename);
+ $self->set_error('could not rename temp summary file '.$temp -> filename);
}
}
}
- violent_unlock_file ($self->summaryfile) unless (write_unlock_file ($self->summaryfile));
+ $summary -> unlock;
}
# return
sub pick_wrap {
my ($self, $gosub, $filename, @param) = @_;
my $status;
+ my $cache = new Lock ($filename);
- unless (lock_file ($filename)) {
- violent_unlock_file ($filename);
- $self->set_error ('could not lock cache file '.$filename);
+ unless ($cache -> lock (LH_SHARED)) {
+ $self->set_error ('could not lock cache file '.$cache -> filename);
}
else {
- local *CACHE;
- unless (sysopen (CACHE, $filename, O_RDONLY)) {
- $self->set_error ('could not open to read cache file '.$filename);
+ unless ($cache -> open (O_RDONLY)) {
+ $self->set_error ('could not open to read cache file '.$cache -> filename);
}
else {
$status = $self -> read_wrap (
$gosub,
- \*CACHE,
+ $cache,
@param
);
- unless (close CACHE) {
+ unless ($cache -> close) {
$status=0;
- $self->set_error('could not close cache file '.$filename);
+ $self->set_error('could not close cache file '.$cache -> filename);
}
}
- violent_unlock_file ($filename) unless (unlock_file ($filename));
+ $cache -> unlock;
}
# return
sub read_wrap {
my ($self, $gosub, @param) = @_;
my $status;
+ my $summary = new Lock ($self -> summaryfile);
- unless (lock_file ($self->summaryfile)) {
- violent_unlock_file ($self->summaryfile);
- $self->set_error ('could not read-lock summary file '.$self->summaryfile);
+ unless ($summary -> lock (LH_SHARED)) {
+ $self->set_error ('could not read-lock summary file '.$summary -> filename);
}
else {
- local *S;
- unless (sysopen (S, $self->summaryfile, O_RDONLY | $O_BINARY)) {
- $self->set_error ('could not open to read summary file '.$self->summaryfile);
+ unless ($summary -> open (O_RDONLY | $O_BINARY)) {
+ $self->set_error ('could not open to read summary file '.$summary -> filename);
}
else {
$status = $gosub -> (
$self,
- \*S,
+ $summary,
@param
);
- unless (close S) {
+ unless ($summary -> close) {
$status=0;
- $self->set_error('could not close summary file '.$self->summaryfile);
+ $self->set_error('could not close summary file '.$summary -> filename);
}
}
- violent_unlock_file ($self->summaryfile) unless (unlock_file ($self->summaryfile));
+ $summary -> unlock;
}
# return
sub mod_wrap {
my ($self, $gosub, @param) = @_;
my $status;
+ my $summary = new Lock ($self -> summaryfile);
- unless (write_lock_file ($self->summaryfile)) {
- violent_unlock_file ($self->summaryfile);
- $self->set_error ('could not write-lock summary file '.$self->summaryfile);
+ unless ($summary -> lock (LH_EXCL)) {
+ $self->set_error ('could not write-lock summary file '.$summary -> filename);
}
else {
- local *S;
- unless (sysopen (S, $self->summaryfile, O_RDWR | $O_BINARY)) {
- $self->set_error ('could not open to read/write summary file '.$self->summaryfile);
+ unless ($summary -> open (O_RDWR | $O_BINARY)) {
+ $self->set_error ('could not open to read/write summary file '.$summary -> filename);
}
else {
$status = $gosub -> (
$self,
- \*S,
+ $summary,
@param
);
- unless (close S) {
+ unless ($summary -> close) {
$status=0;
- $self->set_error('could not close summary file '.$self->summaryfile);
+ $self->set_error('could not close summary file '.$summary -> filename);
}
}
- violent_unlock_file ($self->summaryfile) unless (write_unlock_file ($self->summaryfile));
+ $summary -> unlock;
}
# return
use CheckRFC;
use Encode::Plain; $Encode::Plain::utf8 = 1; # generally convert from UTF-8
use Encode::Posting;
-use Lock qw(:ALL);
+use Lock;
use Posting::_lib qw(
hr_time
parse_xml_file
# unlock forum main file
#
if ($self -> {forum} -> {flocked}) {
- violent_unlock_file($self -> {conf} -> {forum_file_name}) unless write_unlock_file ($self -> {conf} -> {forum_file_name});
+ $self -> {forum} -> {flocked} -> unlock;
$self -> {forum} -> {flocked} = 0;
}
#
sub load_main_file {
my $self = shift;
- my $lock_stat;
+ my $forum = new Lock ($self -> {conf} -> {forum_file_name});
- unless ($lock_stat = write_lock_file ($self -> {conf} -> {forum_file_name})) {
- if (defined $lock_stat) {
+ unless ($forum -> lock(LH_EXCL)) {
+ unless ($forum -> masterlocked) {
# occupied or no w-bit set for the directory..., hmmm
#
- violent_unlock_file ($self -> {conf} -> {forum_file_name});
$self -> {error} = {
spec => 'occupied',
type => 'repeat'
}
}
else {
- $self -> {forum} -> {flocked} = 1;
+ $self -> {forum} -> {flocked} = $forum;
( $self -> {forum} -> {threads},
$self -> {forum} -> {last_thread},
$self -> {forum} -> {last_message},
if (exists ($formdata -> {$name {$_}} -> {type}) and $formdata -> {$name {$_}} -> {type} eq 'name') {
$val_ww =~ y/a-zA-Z//cd;
- my @badlist = map {qr/\Q$_/i} qw (
- # insert badmatchlist here
- );
+ my @badlist;
+# my @badlist = map {qr/\Q$_/i} qw (
+# # insert badmatchlist here
+# );
- push @badlist => map {qr/\b\Q$_\E\b/i} qw(
- # insert badwordlist here
- );
+# push @badlist => map {qr/\b\Q$_\E\b/i} qw(
+# # insert badwordlist here
+# );
for (@badlist) {
if ($val_ww =~ /$_/) {
my $formdata = $self -> {conf} -> {form_data};
if (@{$self -> {fetch}}) {
- my $filename = $self -> {conf} -> {message_path}.'t'.$self -> {fup_tid}.'.xml';
+ my $thread = new Lock ($self -> {conf} -> {message_path}.'t'.$self -> {fup_tid}.'.xml');
- if (lock_file ($filename)) {
- my $xml = parse_xml_file ($filename);
- violent_unlock_file($filename) unless unlock_file ($filename);
+ if ($thread -> lock (LH_SHARED)) {
+ my $xml = parse_xml_file ($thread -> filename);
+ $thread -> unlock;
if ($xml) {
my $mnode = get_message_node ($xml, 't'.$self -> {fup_tid}, 'm'.$self -> {fup_mid});