]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/IPC.pm
treewide: reseed RNG in child processes
[public-inbox.git] / lib / PublicInbox / IPC.pm
index dbb87e4ebedb006dbaa22d11786fd8d2cc686d3d..6efaff3827ce101db268826332e671927dfcae31 100644 (file)
@@ -105,8 +105,10 @@ sub ipc_worker_spawn {
        pipe(my ($r_res, $w_res)) or die "pipe: $!";
        my $sigset = $oldset // PublicInbox::DS::block_signals();
        $self->ipc_atfork_prepare;
-       defined(my $pid = fork) or die "fork: $!";
+       my $seed = rand(0xffffffff);
+       my $pid = fork // die "fork: $!";
        if ($pid == 0) {
+               srand($seed);
                eval { PublicInbox::DS->Reset };
                delete @$self{qw(-wq_s1 -wq_workers -wq_ppid)};
                $w_req = $r_res = undef;
@@ -286,8 +288,10 @@ sub wq_do { # always async
 
 sub _wq_worker_start ($$) {
        my ($self, $oldset) = @_;
+       my $seed = rand(0xffffffff);
        my $pid = fork // die "fork: $!";
        if ($pid == 0) {
+               srand($seed);
                eval { PublicInbox::DS->Reset };
                delete @$self{qw(-wq_s1 -wq_workers -wq_ppid)};
                $SIG{$_} = 'IGNORE' for (qw(PIPE TTOU TTIN));