[system] / trunk / webwork-modperl / lib / WeBWorK / DB / GDBM.pm Repository:
ViewVC logotype

Diff of /trunk/webwork-modperl/lib/WeBWorK/DB/GDBM.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 315 Revision 316
5# these should probably be in a constants file somewhere... 5# these should probably be in a constants file somewhere...
6use constant MAX_TIE_ATTEMPTS => 30; 6use constant MAX_TIE_ATTEMPTS => 30;
7use constant TIE_RETRY_DELAY => 2; 7use constant TIE_RETRY_DELAY => 2;
8use constant CREATE_MODE => 0660; 8use constant CREATE_MODE => 0660;
9 9
10sub new($$$) { 10sub new($$) {
11 my $proto = shift; 11 my $proto = shift;
12 my $class = ref($proto) || $proto; 12 my $class = ref($proto) || $proto;
13 my $self = { 13 my $self = {
14 hashRef => {}, 14 hashRef => {},
15 gdbm_file => shift, 15 gdbm_file => shift,
16 accessMode => shift,
17 }; 16 };
18 bless $self, $class; 17 bless $self, $class;
19 return $self; 18 return $self;
20} 19}
21 20
22sub connect($) { 21sub connect($$) {
23 my $self = shift; 22 my $self = shift;
23 my $accessMode = shift;
24 return if tied %$self->{hashRef}; # already tied! 24 return if tied %$self->{hashRef}; # already tied!
25 my $mode = lc $self->{accessMode} eq "w" ? GDBM_WRCREAT() : GDBM_READER(); 25 my $mode = lc $accessMode eq "rw" ? GDBM_WRCREAT() : GDBM_READER();
26 foreach (1 .. MAX_TIE_ATTEMPTS) { 26 foreach (1 .. MAX_TIE_ATTEMPTS) {
27 return if tie %{$self->{hashRef}}, "GDBM_File", 27 return if tie %{$self->{hashRef}}, "GDBM_File",
28 $self->{gdbm_file}, 28 $self->{gdbm_file},
29 $mode, 29 $mode,
30 $self->{accessMode}; 30 $accessMode;
31 sleep TIE_RETRY_DELAY; 31 sleep TIE_RETRY_DELAY;
32 } 32 }
33 die "WeBWorK::Tie::GDBM::connect: unable to tie ", $self->{gdbm_file}, ": $!"; 33 die "unable to tie ", $self->{gdbm_file}, ": $!";
34} 34}
35 35
36sub hashRef($) { 36sub hashRef($) {
37 my $self = shift; 37 my $self = shift;
38 return unless tied %{$self->{hashRef}}; # not tied! 38 return unless tied %{$self->{hashRef}}; # not tied!

Legend:
Removed from v.315  
changed lines
  Added in v.316

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9