diff options
author | Eric Wong <e@yhbt.net> | 2020-06-24 18:45:07 +0000 |
---|---|---|
committer | Eric Wong <e@yhbt.net> | 2020-06-25 05:37:45 +0000 |
commit | f977826a17f8735e6947dd2da380df8c6d0b38d8 (patch) | |
tree | a3879cdbfd7ba1ac32008173d163d8f5f4163fbb /lib/PublicInbox/Lock.pm | |
parent | 7601f7d864d74dae58ee248e426527fb2ebe74a5 (diff) | |
download | public-inbox-f977826a17f8735e6947dd2da380df8c6d0b38d8.tar.gz |
We can reduce the amount of platform-specific code by always relying on IN_MODIFY/NOTE_WRITE notifications from lock release. This reduces the number of times our read-only daemons will need to wake up when -watch sees no-op message changes (e.g. replied, seen, recent flag changes).
Diffstat (limited to 'lib/PublicInbox/Lock.pm')
-rw-r--r-- | lib/PublicInbox/Lock.pm | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/lib/PublicInbox/Lock.pm b/lib/PublicInbox/Lock.pm index 693a3794..c0d4d3b3 100644 --- a/lib/PublicInbox/Lock.pm +++ b/lib/PublicInbox/Lock.pm @@ -21,16 +21,12 @@ sub lock_acquire { } sub lock_release { - my ($self) = @_; + my ($self, $wake) = @_; return unless $self->{lock_path}; my $lockfh = delete $self->{lockfh} or croak 'not locked'; - # NetBSD 8.1 and OpenBSD 6.5 (and maybe other versions/*BSDs) lack - # NOTE_CLOSE_WRITE from FreeBSD 11+, so trigger NOTE_WRITE, instead. - # We also need to change the ctime on Linux systems w/o inotify - if ($^O ne 'linux' || !eval { require Linux::Inotify2; 1 }) { - syswrite($lockfh, '.'); - } + syswrite($lockfh, '.') if $wake; + flock($lockfh, LOCK_UN) or die "unlock failed: $!\n"; close $lockfh or die "close failed: $!\n"; } |