Re: Clock skew failures in Memoize test suite
[p5sagit/p5-mst-13.2.git] / lib / Memoize / ExpireFile.pm
index 22e4d67..e52c09a 100644 (file)
@@ -10,29 +10,20 @@ See L<Memoize::Expire>.
 
 =cut
 
+$VERSION = 1.01;
 use Carp;
 
+my $Zero = pack("N", 0);
+
 sub TIEHASH {
   my ($package, %args) = @_;
-  my %cache;
-  if ($args{TIE}) {
-    my ($module, @opts) = @{$args{TIE}};
-    my $modulefile = $module . '.pm';
-    $modulefile =~ s{::}{/}g;
-    eval { require $modulefile };
-    if ($@) {
-      croak "Memoize::ExpireFile: Couldn't load hash tie module `$module': $@; aborting";
-    }
-    my $rc = (tie %cache => $module, @opts);
-    unless ($rc) {
-      croak "Memoize::ExpireFile: Couldn't tie hash to `$module': $@; aborting";
-    }
-  }
-  bless {ARGS => \%args, C => \%cache} => $package;
+  my $cache = $args{HASH} || {};
+  bless {ARGS => \%args, C => $cache} => $package;
 }
 
 
 sub STORE {
+#  print "Expiry manager STORE handler\n";
   my ($self, $key, $data) = @_;
   my $cache = $self->{C};
   my $cur_date = pack("N", (stat($key))[9]);
@@ -46,13 +37,16 @@ sub FETCH {
 }
 
 sub EXISTS {
+#  print "Expiry manager EXISTS handler\n";
   my ($self, $key) = @_;
-  my $old_date = $self->{C}{"T$key"} || "0";
-  my $cur_date = pack("N", (stat($key))[9]);
-  if ($self->{ARGS}{CHECK_DATE} && $old_date gt $cur_date) {
-    return $self->{ARGS}{CHECK_DATE}->($key, $old_date, $cur_date);
-  } 
-  return $old_date ge $cur_date;
+  my $cache_date = $self->{C}{"T$key"} || $Zero;
+  my $file_date = pack("N", (stat($key))[9]);#
+#  if ($self->{ARGS}{CHECK_DATE} && $old_date gt $cur_date) {
+#    return $self->{ARGS}{CHECK_DATE}->($key, $old_date, $cur_date);
+#  } 
+  my $res = $cache_date ge $file_date;
+#  print $res ? "... still good\n" : "... expired\n";
+  $res;
 }
 
 1;