From f977826a17f8735e6947dd2da380df8c6d0b38d8 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Wed, 24 Jun 2020 18:45:07 +0000 Subject: lock: reduce inotify wakeups 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). --- lib/PublicInbox/Lock.pm | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) (limited to 'lib/PublicInbox/Lock.pm') 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"; } -- cgit v1.2.3-24-ge0c7