about summary refs log tree commit homepage
path: root/lib/PublicInbox/Syscall.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-09-24 20:19:21 +0000
committerEric Wong <e@80x24.org>2023-09-24 23:14:21 +0000
commitb8db6914a2a7da45cf0aed20240c8c6696a16968 (patch)
tree86ad51c6e6da846b14b29f97f1d9d130d68ae402 /lib/PublicInbox/Syscall.pm
parent1afb6f5133444bc53db047574d5142f85dfc2218 (diff)
downloadpublic-inbox-b8db6914a2a7da45cf0aed20240c8c6696a16968.tar.gz
Instead of converting to bytes to bits and asking `vec' to
operate on single bits, we can just have `vec' work on 8 bits
at-a-time.

This also fixes an overallocation in pure Perl Linux recv_cmd4.
Adding an extra byte ourselves for "\0" isn't necessary: Perl
already does it internally everywhere when creating/resizing
scalars.
Diffstat (limited to 'lib/PublicInbox/Syscall.pm')
-rw-r--r--lib/PublicInbox/Syscall.pm6
1 files changed, 3 insertions, 3 deletions
diff --git a/lib/PublicInbox/Syscall.pm b/lib/PublicInbox/Syscall.pm
index 776fbe23..b76a9e8a 100644
--- a/lib/PublicInbox/Syscall.pm
+++ b/lib/PublicInbox/Syscall.pm
@@ -283,7 +283,7 @@ sub epoll_wait_mod4 {
         # resize our static buffer if maxevents bigger than we've ever done
         if ($maxevents > $epoll_wait_size) {
                 $epoll_wait_size = $maxevents;
-                vec($epoll_wait_events, $maxevents * 12 * 8 - 1, 1) = 0;
+                vec($epoll_wait_events, $maxevents * 12 - 1, 8) = 0;
         }
         @$events = ();
         my $ct = syscall($SYS_epoll_wait, $epfd, $epoll_wait_events,
@@ -304,7 +304,7 @@ sub epoll_wait_mod8 {
         # resize our static buffer if maxevents bigger than we've ever done
         if ($maxevents > $epoll_wait_size) {
                 $epoll_wait_size = $maxevents;
-                vec($epoll_wait_events, $maxevents * 16 * 8 - 1, 1) = 0;
+                vec($epoll_wait_events, $maxevents * 16 - 1, 8) = 0;
         }
         @$events = ();
         my $ct = syscall($SYS_epoll_wait, $epfd, $epoll_wait_events,
@@ -429,7 +429,7 @@ no warnings 'once';
 
 *recv_cmd4 = sub ($$$) {
         my ($sock, undef, $len) = @_;
-        vec($_[1] //= '', ($len + 1) * 8, 1) = 0;
+        vec($_[1] //= '', $len - 1, 8) = 0;
         my $cmsghdr = "\0" x msg_controllen; # 10 * sizeof(int)
         my $iov = pack('P'.TMPL_size_t, $_[1], $len);
         my $mh = pack('PL' . # msg_name, msg_namelen (socklen_t (U32))