| Index: src/platform-win32.cc
|
| diff --git a/src/platform-win32.cc b/src/platform-win32.cc
|
| index 3adae181e1db80b602eadd5d17f1a36e7580c72e..e36fc87539dbd65f149e77eea30bb171d4207663 100644
|
| --- a/src/platform-win32.cc
|
| +++ b/src/platform-win32.cc
|
| @@ -141,20 +141,11 @@ static Mutex* limit_mutex = NULL;
|
|
|
| #if defined(V8_TARGET_ARCH_IA32)
|
| static OS::MemCopyFunction memcopy_function = NULL;
|
| -static LazyMutex memcopy_function_mutex = LAZY_MUTEX_INITIALIZER;
|
| // Defined in codegen-ia32.cc.
|
| OS::MemCopyFunction CreateMemCopyFunction();
|
|
|
| // Copy memory area to disjoint memory area.
|
| void OS::MemCopy(void* dest, const void* src, size_t size) {
|
| - if (memcopy_function == NULL) {
|
| - ScopedLock lock(memcopy_function_mutex.Pointer());
|
| - if (memcopy_function == NULL) {
|
| - OS::MemCopyFunction temp = CreateMemCopyFunction();
|
| - MemoryBarrier();
|
| - memcopy_function = temp;
|
| - }
|
| - }
|
| // Note: here we rely on dependent reads being ordered. This is true
|
| // on all architectures we currently support.
|
| (*memcopy_function)(dest, src, size);
|
| @@ -563,22 +554,13 @@ char* Time::LocalTimezone() {
|
| }
|
|
|
|
|
| -void OS::SetUp() {
|
| - // Seed the random number generator.
|
| - // Convert the current time to a 64-bit integer first, before converting it
|
| - // to an unsigned. Going directly can cause an overflow and the seed to be
|
| - // set to all ones. The seed will be identical for different instances that
|
| - // call this setup code within the same millisecond.
|
| - uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
|
| - srand(static_cast<unsigned int>(seed));
|
| - limit_mutex = CreateMutex();
|
| -}
|
| -
|
| -
|
| void OS::PostSetUp() {
|
| // Math functions depend on CPU features therefore they are initialized after
|
| // CPU.
|
| MathSetup();
|
| +#if defined(V8_TARGET_ARCH_IA32)
|
| + memcopy_function = CreateMemCopyFunction();
|
| +#endif
|
| }
|
|
|
|
|
| @@ -1967,8 +1949,14 @@ class SamplerThread : public Thread {
|
| : Thread(Thread::Options("SamplerThread", kSamplerThreadStackSize)),
|
| interval_(interval) {}
|
|
|
| + static void SetUp() {
|
| + if (!mutex_) {
|
| + mutex_ = OS::CreateMutex();
|
| + }
|
| + }
|
| +
|
| static void AddActiveSampler(Sampler* sampler) {
|
| - ScopedLock lock(mutex_.Pointer());
|
| + ScopedLock lock(mutex_);
|
| SamplerRegistry::AddActiveSampler(sampler);
|
| if (instance_ == NULL) {
|
| instance_ = new SamplerThread(sampler->interval());
|
| @@ -1979,7 +1967,7 @@ class SamplerThread : public Thread {
|
| }
|
|
|
| static void RemoveActiveSampler(Sampler* sampler) {
|
| - ScopedLock lock(mutex_.Pointer());
|
| + ScopedLock lock(mutex_);
|
| SamplerRegistry::RemoveActiveSampler(sampler);
|
| if (SamplerRegistry::GetState() == SamplerRegistry::HAS_NO_SAMPLERS) {
|
| RuntimeProfiler::StopRuntimeProfilerThreadBeforeShutdown(instance_);
|
| @@ -2065,7 +2053,7 @@ class SamplerThread : public Thread {
|
| RuntimeProfilerRateLimiter rate_limiter_;
|
|
|
| // Protects the process wide state below.
|
| - static LazyMutex mutex_;
|
| + static Mutex* mutex_;
|
| static SamplerThread* instance_;
|
|
|
| private:
|
| @@ -2073,10 +2061,23 @@ class SamplerThread : public Thread {
|
| };
|
|
|
|
|
| -LazyMutex SamplerThread::mutex_ = LAZY_MUTEX_INITIALIZER;
|
| +Mutex* SamplerThread::mutex_ = NULL;
|
| SamplerThread* SamplerThread::instance_ = NULL;
|
|
|
|
|
| +void OS::SetUp() {
|
| + // Seed the random number generator.
|
| + // Convert the current time to a 64-bit integer first, before converting it
|
| + // to an unsigned. Going directly can cause an overflow and the seed to be
|
| + // set to all ones. The seed will be identical for different instances that
|
| + // call this setup code within the same millisecond.
|
| + uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
|
| + srand(static_cast<unsigned int>(seed));
|
| + limit_mutex = CreateMutex();
|
| + SamplerThread::SetUp();
|
| +}
|
| +
|
| +
|
| Sampler::Sampler(Isolate* isolate, int interval)
|
| : isolate_(isolate),
|
| interval_(interval),
|
|
|