#26949 [Opn->Csd]: rand(min,max) always returns min when zts enabled

From: Date: Mon, 19 Jan 2004 02:25:57 +0000
Subject: #26949 [Opn->Csd]: rand(min,max) always returns min when zts enabled
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-53549@lists.php.net to get a copy of this message
ID: 26949 Updated by: sniper@php.net Reported By: alucard at vitriolic dot org -Status: Open +Status: Closed Bug Type: Math related Operating System: Solaris 9 PHP Version: 4CVS-2004-01-18 New Comment: This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2004-01-18 16:16:54] alucard at vitriolic dot org No worries, I don't mind helping you troubleshoot this one. Not many folks run Solaris boxen as their home machines, can't imagine why...;) Without ZTS: # sapi/cli/php -r 'echo getrandmax(),"\n";' 2147483647 # sapi/cli/php -r 'srand(); echo rand(0,100),"\n";' 32 # sapi/cli/php -r 'srand(); echo rand(0,100),"\n";' 5 # # sapi/cli/php -r 'srand(); echo rand(0,100),"\n";' 22 With ZTS: # sapi/cli/php -r 'echo getrandmax(),"\n";' 2147483647 # sapi/cli/php -r 'srand(); echo rand(0,100),"\n";' 0 # sapi/cli/php -r 'srand(); echo rand(0,100),"\n";' 0 # sapi/cli/php -r 'srand(); echo rand(0,100),"\n";' 0 The value returned by getrandmax() is definitely not what's being used by rand() with ZTS enabled. Calling rand() approx. 150 times and sending the output to a file, the highest value I get is 32481. This leads me to believe that despite what's being returned by getrandmax(), it's using 32768 as its max in operation. mt_rand() works as expected with ZTS enabled, both with and without ranges specified: # sapi/cli/php -r 'echo mt_rand(),"\n";' 1128343079 # sapi/cli/php -r 'echo mt_rand(),"\n";' 1820256748 # sapi/cli/php -r 'echo mt_rand(0,100),"\n";' 68 # sapi/cli/php -r 'echo mt_rand(0,100),"\n";' 83 # sapi/cli/php -r 'echo mt_rand(0,100),"\n";' 54 mt_getrandmax() returns the same result as getrandmax() (but, as shown above, appears to actually use it). # sapi/cli/php -r 'echo mt_getrandmax(),"\n";' 2147483647 ------------------------------------------------------------------------ [2004-01-18 09:36:42] sniper@php.net Also, what does this output (in zts and in non-zts mode): # sapi/cli/php 'echo getrandmax();' ------------------------------------------------------------------------ [2004-01-18 09:35:02] sniper@php.net Try adding 'srand();' call there: # sapi/cli/php -r 'srand(); echo rand(0,100),"\n";' Does this work better? (Note: I can not reproduce this within Linux) ------------------------------------------------------------------------ [2004-01-18 02:04:50] alucard at vitriolic dot org Same results: # rm config.cache config.cache: No such file or directory # ./configure --disable-all --disable-cgi --enable-experimental-zts # make clean && make # sapi/cli/php -r 'echo rand(),"\n"; echo rand(0,100),"\n";' 29622 0 # sapi/cli/php -r 'echo rand(),"\n"; echo rand(0,100),"\n";' 6807 0 # sapi/cli/php -r 'echo rand(),"\n"; echo rand(0,100),"\n";' 2050 0 # sapi/cli/php -v PHP 4.3.5RC2-dev (cli) (built: Jan 18 2004 00:52:22) Without zts enabled, the results are: # sapi/cli/php -r 'echo rand(),"\n"; echo rand(0,100),"\n";' 2121634529 48 # sapi/cli/php -r 'echo rand(),"\n"; echo rand(0,100),"\n";' 1303411959 20 ------------------------------------------------------------------------ [2004-01-17 20:20:48] sniper@php.net Please try using this CVS snapshot: http://snaps.php.net/php4-STABLE-latest.tar.gz For Windows: http://snaps.php.net/win32/php4-win32-STABLE-latest.zip ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/26949 -- Edit this bug report at http://bugs.php.net/?id=26949&edit=1

« previous php.bugs (#53549) next »