| Index: src/v8.cc
|
| ===================================================================
|
| --- src/v8.cc (revision 8778)
|
| +++ src/v8.cc (working copy)
|
| @@ -51,7 +51,10 @@
|
| bool V8::has_fatal_error_ = false;
|
| bool V8::use_crankshaft_ = true;
|
|
|
| +static Mutex* entropy_mutex = OS::CreateMutex();
|
| +static EntropySource entropy_source;
|
|
|
| +
|
| bool V8::Initialize(Deserializer* des) {
|
| InitializeOncePerProcess();
|
|
|
| @@ -103,8 +106,14 @@
|
|
|
| static void seed_random(uint32_t* state) {
|
| for (int i = 0; i < 2; ++i) {
|
| - state[i] = FLAG_random_seed;
|
| - while (state[i] == 0) {
|
| + if (FLAG_random_seed != 0) {
|
| + state[i] = FLAG_random_seed;
|
| + } else if (entropy_source != NULL) {
|
| + uint32_t val;
|
| + ScopedLock lock(entropy_mutex);
|
| + entropy_source(reinterpret_cast<unsigned char*>(&val), sizeof(uint32_t));
|
| + state[i] = val;
|
| + } else {
|
| state[i] = random();
|
| }
|
| }
|
| @@ -125,6 +134,11 @@
|
| }
|
|
|
|
|
| +void V8::SetEntropySource(EntropySource source) {
|
| + entropy_source = source;
|
| +}
|
| +
|
| +
|
| // Used by JavaScript APIs
|
| uint32_t V8::Random(Isolate* isolate) {
|
| ASSERT(isolate == Isolate::Current());
|
|
|