* [PATCH 1/2] daemon: ignore SIGPIPE while running
@ 2020-01-08 10:44 5% ` Eric Wong
0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2020-01-08 10:44 UTC (permalink / raw)
To: meta
This is only needed for IO::Poll users, since users with
(signalfd || EVFILT_SIGNAL) support run with SIGPIPE (and
all other signals) blocked.
Fixes: 81a9a43fb858d197 ("daemon: use sigprocmask to block signals at startup")
---
lib/PublicInbox/Daemon.pm | 1 +
1 file changed, 1 insertion(+)
diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm
index 292bc339..278c80f5 100644
--- a/lib/PublicInbox/Daemon.pm
+++ b/lib/PublicInbox/Daemon.pm
@@ -637,6 +637,7 @@ sub daemon_loop ($$$$) {
sub run ($$$;$) {
my ($default, $refresh, $post_accept, $nntpd) = @_;
+ local $SIG{PIPE} = 'IGNORE';
daemon_prepare($default);
my $af_default = $default =~ /:8080\z/ ? 'httpready' : undef;
my $for_destroy = daemonize();
^ permalink raw reply related [relevance 5%]
* [PATCH 08/17] daemon: use sigprocmask to block signals at startup
2019-11-24 0:22 5% ` [PATCH 00/17] test fixes and cleanups Eric Wong
@ 2019-11-24 0:22 7% ` Eric Wong
0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2019-11-24 0:22 UTC (permalink / raw)
To: meta
`$SIG{FOO} = "IGNORE"' will cause the daemon to miss signals
entirely. Instead, we can use sigprocmask to block signal
delivery until we have our signal handlers setup. This closes a
race where a PID file can be written for an init script and a
signal to be dropped via "IGNORE".
---
lib/PublicInbox/Daemon.pm | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm
index b3743f5c..e830a98f 100644
--- a/lib/PublicInbox/Daemon.pm
+++ b/lib/PublicInbox/Daemon.pm
@@ -8,7 +8,7 @@ use warnings;
use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/;
use IO::Handle;
use IO::Socket;
-use POSIX qw(WNOHANG);
+use POSIX qw(WNOHANG :signal_h);
use Socket qw(IPPROTO_TCP SOL_SOCKET);
sub SO_ACCEPTFILTER () { 0x1000 }
use Cwd qw/abs_path/;
@@ -19,7 +19,7 @@ require PublicInbox::EvCleanup;
require PublicInbox::Listener;
require PublicInbox::ParentPipe;
my @CMD;
-my $set_user;
+my ($set_user, $oldset);
my (@cfg_listen, $stdout, $stderr, $group, $user, $pid_file, $daemonize);
my $worker_processes = 1;
my @listeners;
@@ -76,9 +76,11 @@ sub accept_tls_opt ($) {
sub daemon_prepare ($) {
my ($default_listen) = @_;
+ $oldset = POSIX::SigSet->new();
+ my $newset = POSIX::SigSet->new();
+ $newset->fillset or die "fillset: $!";
+ sigprocmask(SIG_SETMASK, $newset, $oldset) or die "sigprocmask: $!";
@CMD = ($0, @ARGV);
- $SIG{HUP} = $SIG{USR1} = $SIG{USR2} = $SIG{PIPE} =
- $SIG{TTIN} = $SIG{TTOU} = $SIG{WINCH} = 'IGNORE';
my %opts = (
'l|listen=s' => \@cfg_listen,
'1|stdout=s' => \$stdout,
@@ -482,6 +484,7 @@ sub master_loop {
syswrite($w, '.');
};
}
+ sigprocmask(SIG_SETMASK, $oldset) or die "sigprocmask: $!";
reopen_logs();
# main loop
my $quit = 0;
@@ -616,6 +619,7 @@ sub daemon_loop ($$$$) {
# this calls epoll_create:
PublicInbox::Listener->new($_, $tls_cb || $post_accept)
} @listeners;
+ sigprocmask(SIG_SETMASK, $oldset) or die "sigprocmask: $!";
PublicInbox::DS->EventLoop;
$parent_pipe = undef;
}
^ permalink raw reply related [relevance 7%]
* [PATCH 00/17] test fixes and cleanups
@ 2019-11-24 0:22 5% ` Eric Wong
2019-11-24 0:22 7% ` [PATCH 08/17] daemon: use sigprocmask to block signals at startup Eric Wong
0 siblings, 1 reply; 3+ results
From: Eric Wong @ 2019-11-24 0:22 UTC (permalink / raw)
To: meta
There's some fixes for race conditions around daemon
startup and shutdown and resurrects start_script for
slightly improved test performance.
And slowly eliminating all END{} block usages
Eric Wong (17):
tests: disable daemon workers in a few more places
tests: use strict everywhere
t/v1-add-remove-add: quiet down "git init"
t/xcpdb-reshard: test xcpdb --compact
t/httpd-corner: wait for worker process death
t/nntpd-tls: sometimes SSL_connect succeeds quickly
.gitignore: ignore local prove(1) files
daemon: use sigprocmask to block signals at startup
daemon: use sigprocmask when respawning workers
daemon: avoid race when quitting workers
t/common: start_script replaces spawn_listener
t/nntpd-validate: get rid of threads dependency
xapcmd: replace Xtmpdirs with File::Temp->newdir
tests: use File::Temp->newdir instead of tempdir()
tests: quiet down commit graph
t/perf-*.t: use $ENV{GIANT_INBOX_DIR} consistently
tests: move giant inbox/git dependent tests to xt/
.gitignore | 2 +
MANIFEST | 11 ++-
lib/PublicInbox/Daemon.pm | 35 +++++--
lib/PublicInbox/Xapcmd.pm | 73 +++++---------
t/.gitconfig | 4 +
t/admin.t | 4 +-
t/altid.t | 4 +-
t/altid_v2.t | 3 +-
t/cgi.t | 3 +-
t/common.perl | 184 ++++++++++++++++++++++++++---------
t/config.t | 4 +-
t/convert-compact.t | 3 +-
t/edit.t | 3 +-
t/emergency.t | 4 +-
t/feed.t | 3 +-
t/filter_rubylang.t | 5 +-
t/git.t | 6 +-
t/html_index.t | 4 +-
t/httpd-corner.psgi | 2 +-
t/httpd-corner.t | 70 +++++++------
t/httpd-https.t | 31 ++----
t/httpd-unix.t | 51 +++++-----
t/httpd.t | 16 ++-
t/import.t | 4 +-
t/indexlevels-mirror.t | 3 +-
t/init.t | 3 +-
t/mda.t | 3 +-
t/mda_filter_rubylang.t | 3 +-
t/mid.t | 1 +
t/msgmap.t | 4 +-
t/nntpd-tls.t | 42 +++-----
t/nntpd.t | 19 ++--
t/nulsubject.t | 4 +-
t/over.t | 4 +-
t/plack.t | 4 +-
t/psgi_attach.t | 4 +-
t/psgi_bad_mids.t | 4 +-
t/psgi_mount.t | 4 +-
t/psgi_multipart_not.t | 4 +-
t/psgi_scan_all.t | 4 +-
t/psgi_search.t | 4 +-
t/psgi_text.t | 4 +-
t/psgi_v2.t | 3 +-
t/purge.t | 4 +-
t/qspawn.t | 1 +
t/replace.t | 6 +-
t/search-thr-index.t | 4 +-
t/search.t | 4 +-
t/solver_git.t | 3 +-
t/spamcheck_spamc.t | 4 +-
t/v1-add-remove-add.t | 6 +-
t/v1reindex.t | 3 +-
t/v2-add-remove-add.t | 3 +-
t/v2mda.t | 3 +-
t/v2mirror.t | 26 ++---
t/v2reindex.t | 3 +-
t/v2writable.t | 13 ++-
t/watch_filter_rubylang.t | 3 +-
t/watch_maildir.t | 5 +-
t/watch_maildir_v2.t | 10 +-
t/www_listing.t | 11 +--
t/xcpdb-reshard.t | 7 +-
{t => xt}/git-http-backend.t | 19 ++--
{t => xt}/nntpd-validate.t | 57 +++++------
{t => xt}/perf-msgview.t | 6 +-
{t => xt}/perf-nntpd.t | 34 +++----
{t => xt}/perf-threading.t | 8 +-
67 files changed, 462 insertions(+), 431 deletions(-)
create mode 100644 t/.gitconfig
rename {t => xt}/git-http-backend.t (87%)
rename {t => xt}/nntpd-validate.t (85%)
rename {t => xt}/perf-msgview.t (85%)
rename {t => xt}/perf-nntpd.t (79%)
rename {t => xt}/perf-threading.t (72%)
^ permalink raw reply [relevance 5%]
Results 1-3 of 3 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2019-11-16 11:43 [PATCH 29/29] t/common: start_script replaces spawn_listener Eric Wong
2019-11-24 0:22 5% ` [PATCH 00/17] test fixes and cleanups Eric Wong
2019-11-24 0:22 7% ` [PATCH 08/17] daemon: use sigprocmask to block signals at startup Eric Wong
2020-01-08 10:44 [PATCH 0/2] nntpd and daemon bugfixes Eric Wong
2020-01-08 10:44 5% ` [PATCH 1/2] daemon: ignore SIGPIPE while running 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).