You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by jp...@apache.org on 2011/03/13 00:46:36 UTC

svn commit: r1081019 - in /trafficserver/traffic/trunk: iocore/eventsystem/UnixEThread.cc lib/ts/ink_rand.cc

Author: jplevyak
Date: Sat Mar 12 23:46:35 2011
New Revision: 1081019

URL: http://svn.apache.org/viewvc?rev=1081019&view=rev
Log:
fix the random number generator so that it is not always
the same for every thread.  This was causing collisions
in the cache keys which was causing document truncation.

Modified:
    trafficserver/traffic/trunk/iocore/eventsystem/UnixEThread.cc
    trafficserver/traffic/trunk/lib/ts/ink_rand.cc

Modified: trafficserver/traffic/trunk/iocore/eventsystem/UnixEThread.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/iocore/eventsystem/UnixEThread.cc?rev=1081019&r1=1081018&r2=1081019&view=diff
==============================================================================
--- trafficserver/traffic/trunk/iocore/eventsystem/UnixEThread.cc (original)
+++ trafficserver/traffic/trunk/iocore/eventsystem/UnixEThread.cc Sat Mar 12 23:46:35 2011
@@ -41,7 +41,7 @@ struct AIOCallback;
 #define NO_ETHREAD_ID                   -1
 
 EThread::EThread()
-  : generator((uint32_t)((uintptr_t)time(NULL) ^ (uintptr_t) this)),
+  : generator((uint64_t)ink_get_hrtime_internal() ^ (uint64_t)(uintptr_t)this),
    ethreads_to_be_signalled(NULL),
    n_ethreads_to_be_signalled(0),
    main_accept_index(-1),
@@ -53,7 +53,7 @@ EThread::EThread()
 }
 
 EThread::EThread(ThreadType att, int anid)
-  : generator((uint32_t)((uintptr_t)time(NULL) ^ (uintptr_t) this)),
+  : generator((uint64_t)ink_get_hrtime_internal() ^ (uint64_t)(uintptr_t)this),
     ethreads_to_be_signalled(NULL),
     n_ethreads_to_be_signalled(0),
     main_accept_index(-1),

Modified: trafficserver/traffic/trunk/lib/ts/ink_rand.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/lib/ts/ink_rand.cc?rev=1081019&r1=1081018&r2=1081019&view=diff
==============================================================================
--- trafficserver/traffic/trunk/lib/ts/ink_rand.cc (original)
+++ trafficserver/traffic/trunk/lib/ts/ink_rand.cc Sat Mar 12 23:46:35 2011
@@ -67,7 +67,6 @@ static uint64_t mag01[2]={0ULL, MATRIX_A
 
 InkRand::InkRand(uint64_t d) {
   seed(d);
-  mti = NN+1;
 }
 
 void InkRand::seed(uint64_t seed) {
@@ -81,12 +80,6 @@ uint64_t InkRand::random() {
   uint64_t x;
 
   if (mti >= NN) { /* generate NN words at one time */
-
-    /* if init_genrand64() has not been called, */
-    /* a default initial seed is used     */
-    if (mti == NN+1) 
-      seed(5489ULL); 
-
     for (i=0;i<NN-MM;i++) {
       x = (mt[i]&UM)|(mt[i+1]&LM);
       mt[i] = mt[i+MM] ^ (x>>1) ^ mag01[(int)(x&1ULL)];