X-Git-Url: http://git.rot13.org/?p=Fuse-DBI;a=blobdiff_plain;f=DBI.pm;h=bb429672a4f53ebf98f3b48c51aa342c66cfdcc9;hp=3929145a3b43b139efcc328000a525ae5bb9f006;hb=319f204599f005d7303c923b4387e537a232ead8;hpb=4fdff8a137106b99bab09490f42a1b0966c8caff diff --git a/DBI.pm b/DBI.pm index 3929145..bb42967 100755 --- a/DBI.pm +++ b/DBI.pm @@ -64,6 +64,11 @@ my $ctime_start; sub read_filenames; sub fuse_module_loaded; +# evil, evil way to solve this. It makes this module non-reentrant. But, since +# fuse calls another copy of this script for each mount anyway, this shouldn't +# be a problem. +my $fuse_self; + sub mount { my $class = shift; my $self = {}; @@ -77,7 +82,10 @@ sub mount { carp "mount needs 'mount' as mountpoint" unless ($arg->{'mount'}); # save (some) arguments in self - $self->{$_} = $arg->{$_} foreach (qw(mount)); + foreach (qw(mount invalidate)) { + $self->{$_} = $arg->{$_}; + $fuse_self->{$_} = $arg->{$_}; + } foreach (qw(filenames read update)) { carp "mount needs '$_' SQL" unless ($arg->{$_}); @@ -143,6 +151,17 @@ sub umount { return 1; } +#$SIG{'INT'} = sub { +# print STDERR "umount called by SIG INT\n"; +# umount; +#}; + +sub DESTROY { + my $self = shift; + print STDERR "umount called by DESTROY\n"; + $self->umount; +} + =head2 fuse_module_loaded Checks if C module is loaded in kernel. @@ -348,6 +367,8 @@ sub update_db { return 0; } print "updated '$file' [",$files{$file}{id},"]\n"; + + $fuse_self->{'invalidate'}->() if (ref $fuse_self->{'invalidate'}); } return 1; }