X-Git-Url: http://www.git.stargrave.org/?p=public-inbox.git;a=blobdiff_plain;f=lib%2FPublicInbox%2FCmdIPC4.pm;h=c3a7f56ec7e3f356243d270447402aa3217c499a;hp=74dbf8a12ee4a8090a16d75a8ddbcaee6271cf3b;hb=9a7c75b64e9dc351fddce61b32694d504c2e80c2;hpb=29c85048380d8b7a9cbfd632610740153fccc555 diff --git a/lib/PublicInbox/CmdIPC4.pm b/lib/PublicInbox/CmdIPC4.pm index 74dbf8a1..c3a7f56e 100644 --- a/lib/PublicInbox/CmdIPC4.pm +++ b/lib/PublicInbox/CmdIPC4.pm @@ -17,7 +17,16 @@ no warnings 'once'; my ($sock, $fds, undef, $flags) = @_; my $mh = Socket::MsgHdr->new(buf => $_[2]); $mh->cmsghdr(SOL_SOCKET, SCM_RIGHTS, pack('i' x scalar(@$fds), @$fds)); - Socket::MsgHdr::sendmsg($sock, $mh, $flags); + my $s; + my $try = 0; + do { + $s = Socket::MsgHdr::sendmsg($sock, $mh, $flags); + } while (!defined($s) && + ($!{ENOBUFS} || $!{ENOMEM} || $!{ETOOMANYREFS}) && + (++$try < 50) && + warn "sleeping on sendmsg: $! (#$try)\n" && + select(undef, undef, undef, 0.1) == 0); + $s; }; *recv_cmd4 = sub ($$$) {