* [PATCH 15/21] gcf2: use PublicInbox::Lock
2023-10-04 3:49 5% [PATCH 00/21] lei + IPC related stuff Eric Wong
@ 2023-10-04 3:49 7% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2023-10-04 3:49 UTC (permalink / raw)
To: meta
It auto-retries on EINTR and saves us the trouble of doing so.
---
lib/PublicInbox/Gcf2.pm | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/lib/PublicInbox/Gcf2.pm b/lib/PublicInbox/Gcf2.pm
index 0f4d2bf0..37262e28 100644
--- a/lib/PublicInbox/Gcf2.pm
+++ b/lib/PublicInbox/Gcf2.pm
@@ -6,10 +6,11 @@
package PublicInbox::Gcf2;
use v5.12;
use PublicInbox::Spawn qw(which popen_rd); # may set PERL_INLINE_DIRECTORY
-use Fcntl qw(LOCK_EX SEEK_SET);
+use Fcntl qw(SEEK_SET);
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
use IO::Handle; # autoflush
use PublicInbox::Git;
+use PublicInbox::Lock;
BEGIN {
use autodie;
@@ -18,10 +19,10 @@ BEGIN {
# to ~/.cache/public-inbox/inline-c if it exists and Inline::C works
my $inline_dir = $ENV{PERL_INLINE_DIRECTORY} //
die 'PERL_INLINE_DIRECTORY not defined';
- open my $fh, '+>', "$inline_dir/.public-inbox.lock";
# CentOS 7.x ships Inline 0.53, 0.64+ has built-in locking
- flock($fh, LOCK_EX);
+ my $lk = PublicInbox::Lock->new("$inline_dir/.public-inbox.lock");
+ my $fh = $lk->lock_acquire;
my $pc = which($ENV{PKG_CONFIG} // 'pkg-config') //
die "pkg-config missing for libgit2";
@@ -74,6 +75,7 @@ EOM
if ($err) {
seek($fh, 0, SEEK_SET);
my @msg = <$fh>;
+ truncate($fh, 0);
die "Inline::C Gcf2 build failed:\n", $err, "\n", @msg;
}
}
^ permalink raw reply related [relevance 7%]
* [PATCH 00/21] lei + IPC related stuff
@ 2023-10-04 3:49 5% Eric Wong
2023-10-04 3:49 7% ` [PATCH 15/21] gcf2: use PublicInbox::Lock Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2023-10-04 3:49 UTC (permalink / raw)
To: meta
More work coming to make internal IPC stuff simpler
and better layered for future enhancements
(FUSE, increase xap_helper usage internally, etc).
Eric Wong (21):
lei: drop stores explicitly at daemon shutdown
ds: hoist out close_non_busy
ds: don't pass FD map to post_loop_do callback
move all non-test @post_loop_do into named subs
lei: close DirIdle (inotify) early at daemon shutdown
input_pipe: {args} is never undefined
lei: do_env combines fchdir and local
lei: get rid of l2m_progress PktOp callback
t/lei_to_mail: modernize and document test
lei: reuse PublicInbox::Config::noop
lei: keep signals blocked on daemon shutdown
mbox_lock: retry on EINTR and use autodie
lock: retry on EINTR, improve error reporting
treewide: use PublicInbox::Lock->new
gcf2: use PublicInbox::Lock
spawn: use autodie and PublicInbox::Lock
xap_helper: retry flock on EINTR
XapHelper.pm: use EINTR-aware recv_cmd wrapper
spawn: drop checks for directory writability
lei: document and local-ize $OPT hashref
searchidx: fix redundant `in' in warning message
lib/PublicInbox/DS.pm | 17 +++--
lib/PublicInbox/Daemon.pm | 47 ++++++-------
lib/PublicInbox/DirIdle.pm | 12 +++-
lib/PublicInbox/Gcf2.pm | 8 ++-
lib/PublicInbox/IPC.pm | 4 +-
lib/PublicInbox/InputPipe.pm | 11 ++-
lib/PublicInbox/LEI.pm | 127 ++++++++++++++++------------------
lib/PublicInbox/LeiAuth.pm | 4 +-
lib/PublicInbox/LeiConfig.pm | 25 +++----
lib/PublicInbox/LeiConvert.pm | 7 +-
lib/PublicInbox/LeiInspect.pm | 28 ++++----
lib/PublicInbox/LeiLcat.pm | 17 +++--
lib/PublicInbox/LeiMirror.pm | 2 +-
lib/PublicInbox/LeiQuery.pm | 19 +++--
lib/PublicInbox/LeiTag.pm | 6 +-
lib/PublicInbox/LeiToMail.pm | 20 +++---
lib/PublicInbox/LeiXSearch.pm | 113 +++++++++++++-----------------
lib/PublicInbox/Lock.pm | 52 ++++++++------
lib/PublicInbox/MboxLock.pm | 49 ++++++-------
lib/PublicInbox/PktOp.pm | 15 ++--
lib/PublicInbox/SearchIdx.pm | 2 +-
lib/PublicInbox/Spawn.pm | 32 ++++-----
lib/PublicInbox/TestCommon.pm | 7 +-
lib/PublicInbox/Watch.pm | 4 +-
lib/PublicInbox/XapHelper.pm | 11 ++-
lib/PublicInbox/xap_helper.h | 6 +-
t/lei-tag.t | 3 +
t/lei_to_mail.t | 37 +++++-----
t/solver_git.t | 3 +-
t/v2mirror.t | 2 +-
30 files changed, 339 insertions(+), 351 deletions(-)
^ permalink raw reply [relevance 5%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2023-10-04 3:49 5% [PATCH 00/21] lei + IPC related stuff Eric Wong
2023-10-04 3:49 7% ` [PATCH 15/21] gcf2: use PublicInbox::Lock Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).