[San-diego-pm] [Fwd: Re: [perl #30028] rand broken on Mac OSX (G5), was Re: problem with rand on OSX]

C. Abney cabney at ucsd.edu
Thu Jun 3 10:53:21 CDT 2004


fyi,

-----Forwarded Message-----

From: Dominic Dunlop <domo at computer.org>
To: perl5-porters at perl.org
Cc: C. Abney (via RT) <perlbug-followup at perl.org>
Subject: Re: [perl #30028] rand broken on Mac OSX (G5), was Re: problem with rand on OSX
Date: 03 Jun 2004 16:59:11 +0200

Summary: fixed in 5.8.4.

On 3 Jun 2004, at 04:21, C. Abney (via RT) wrote:
> #! /usr/bin/perl -w
>
> use strict;
>
> my @jobs;
>
> for (0..2)
> {
>         defined( my $pid = fork() ) or die "my BABY!!!";;
>         last if $pid == 0;
>         push @jobs, $pid;
> }
>
> if ( 3 == @jobs ) {
>         $SIG{CHLD} = 'IGNORE';
>         sleep 1;
> } else {
>         my $slp = int rand 20;
>
>         print "child gets $slp second(s)\n";
>         exit 0;
> }
>
Well, on my Mac OS 10.3.4 (with a G3 processor) that indeed gives

child gets 6 second(s)
child gets 6 second(s)
child gets 6 second(s)

(or similar) with perl5.8.1rc3 (as shipped with Mac OS) or with a 
freshly-built perl5.8.1. Given that the random number seed is stored in 
memory that gets cloned from the parent to each child, and each child 
applies the same algorithm to the seed to get the next random number, 
this is the behaviour I'd expect. However, I get

child gets 19 second(s)
child gets 11 second(s)
child gets 0 second(s)

(or similar) with perl5.8.4, the current stable release, and with 5.9.2 
on the development track.

Both perls are using the same random number generator:
$ perl '-V:rand.*'  # either perl version
randbits='48'
randfunc='drand48'
random_r_proto='0'
randseedtype='long'

What seems to have changed is where the random number generator seed 
gets set: in 5.8.1, it appears to be in the parent before any call to 
rand(), so each child gets the same seed; in 5.8.4 the setting seems to 
be delayed until the first use of rand() -- so each child gets a 
different seed. Adding a line

rand;

near the top of the script to force the setting of the seed in the 
parent brings back the 5.8.1 behaviour.
I can't see a patch between 5.8.1 and 5.8.4 which claims to have 
anything to do with random numbers so I don't know what changed the 
behaviour. Can anybody shed any light?

However, your solution is to upgrade to 5.8.4.

> Perlbug is not set up on that machine

It's delivered with Mac OS X. You can usually get it to do something 
somewhat useful -- like save a report to a file for later mailing by 
some other means -- with command line options. Failing that, please 
include the output of  perl -V  in reports. Thanks.
-- 
Dominic Dunlop

-- 
Charles Abney
Polymorphism Research Laboratory, 0603
UCSD School of Medicine
9500 Gilman Dr.
La Jolla, CA 92093-0603
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 307 bytes
Desc: This is a digitally signed message part
Url : http://mail.pm.org/pipermail/san-diego-pm/attachments/20040603/2456edd4/attachment.bin


More information about the San-Diego-pm mailing list