* [PATCH 11/11] sigfd: simplify loop and improve documentation
2020-01-12 21:17 5% [PATCH 00/11] ds: various cleanups and fixes Eric Wong
@ 2020-01-12 21:17 7% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2020-01-12 21:17 UTC (permalink / raw)
To: meta
We can use the return value of sysread to bound our loop instead
of repeatedly shortening the string. Furthermore add some
comments which can be easily checked against the signalfd(2)
manpage.
---
lib/PublicInbox/Sigfd.pm | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/lib/PublicInbox/Sigfd.pm b/lib/PublicInbox/Sigfd.pm
index ec5d7145..15dedb10 100644
--- a/lib/PublicInbox/Sigfd.pm
+++ b/lib/PublicInbox/Sigfd.pm
@@ -42,14 +42,15 @@ sub new {
# PublicInbox::Daemon in master main loop (blocking)
sub wait_once ($) {
my ($self) = @_;
+ # 128 == sizeof(struct signalfd_siginfo)
my $r = sysread($self->{sock}, my $buf, 128 * 64);
if (defined($r)) {
- while (1) {
- my $sig = unpack('L', $buf);
- my $cb = $self->{sig}->{$sig};
- $cb->($sig) if $cb ne 'IGNORE';
- return $r if length($buf) == 128;
- $buf = substr($buf, 128);
+ my $nr = $r / 128 - 1; # $nr may be -1
+ for my $off (0..$nr) {
+ # the first uint32_t of signalfd_siginfo: ssi_signo
+ my $signo = unpack('L', substr($buf, 128 * $off, 4));
+ my $cb = $self->{sig}->{$signo};
+ $cb->($signo) if $cb ne 'IGNORE';
}
}
$r;
^ permalink raw reply related [relevance 7%]
* [PATCH 00/11] ds: various cleanups and fixes
@ 2020-01-12 21:17 5% Eric Wong
2020-01-12 21:17 7% ` [PATCH 11/11] sigfd: simplify loop and improve documentation Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2020-01-12 21:17 UTC (permalink / raw)
To: meta
Start taking advantage of autovivification to simplify our code
and reduce allocations. Also, I believe it's my first time
using the return value of "push".
Eric Wong (11):
ds: new: avoid redundant check, make clobbering fatal
ds: add_timer: rename from AddTimer, remove a parameter
ds: add an in_loop() function for Inbox.pm use
ds: remove Timer->cancel and Timer class+bless
ds: PostEventLoop: guard ToClose against DESTROY side-effects
ds|http|nntp: simplify {wbuf} population
ds: rely on autovivification for nextq
ds: rely on autovivication for waitpid bits
ds: rely on autovivification for $later_queue
ds: flatten $EXPMAP, delete entries on close
sigfd: simplify loop and improve documentation
lib/PublicInbox/DS.pm | 200 +++++++++++++++++----------------------
lib/PublicInbox/HTTP.pm | 6 +-
lib/PublicInbox/Inbox.pm | 2 +-
lib/PublicInbox/NNTP.pm | 11 +--
lib/PublicInbox/Sigfd.pm | 13 +--
t/ds-leak.t | 2 +-
6 files changed, 105 insertions(+), 129 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 --
2020-01-12 21:17 5% [PATCH 00/11] ds: various cleanups and fixes Eric Wong
2020-01-12 21:17 7% ` [PATCH 11/11] sigfd: simplify loop and improve documentation 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).