From 4a7ed948fe6968d4f3c8c49a5b290b9f6660ecae Mon Sep 17 00:00:00 2001 From: "svenpanne@chromium.org" Date: Tue, 21 May 2013 12:03:49 +0000 Subject: [PATCH] Make sure we register extensions only once. Removed unused member variable. V8::Initialize() can be called from various threads simultaneously, so everything should be done only once per process or within the Isolate. For registering extensions, we do the former now. R=dslomov@chromium.org Review URL: https://codereview.chromium.org/15564002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14730 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/api.h | 2 -- src/bootstrapper.cc | 4 ++++ src/bootstrapper.h | 2 ++ src/v8.cc | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/api.h b/src/api.h index 686abf75c4..12d6e3d082 100644 --- a/src/api.h +++ b/src/api.h @@ -149,12 +149,10 @@ class RegisteredExtension { static void UnregisterAll(); Extension* extension() { return extension_; } RegisteredExtension* next() { return next_; } - RegisteredExtension* next_auto() { return next_auto_; } static RegisteredExtension* first_extension() { return first_extension_; } private: Extension* extension_; RegisteredExtension* next_; - RegisteredExtension* next_auto_; static RegisteredExtension* first_extension_; }; diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index 85812ca28c..7c9e4366ed 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -95,6 +95,10 @@ Handle Bootstrapper::NativesSourceLookup(int index) { void Bootstrapper::Initialize(bool create_heap_objects) { extensions_cache_.Initialize(create_heap_objects); +} + + +void Bootstrapper::InitializeOncePerProcess() { GCExtension::Register(); ExternalizeStringExtension::Register(); StatisticsExtension::Register(); diff --git a/src/bootstrapper.h b/src/bootstrapper.h index e33415eeb9..476ac12e14 100644 --- a/src/bootstrapper.h +++ b/src/bootstrapper.h @@ -88,6 +88,8 @@ class SourceCodeCache BASE_EMBEDDED { // context. class Bootstrapper { public: + static void InitializeOncePerProcess(); + // Requires: Heap::SetUp has been called. void Initialize(bool create_heap_objects); void TearDown(); diff --git a/src/v8.cc b/src/v8.cc index 274128ed4c..e21c815ff5 100644 --- a/src/v8.cc +++ b/src/v8.cc @@ -281,6 +281,7 @@ void V8::InitializeOncePerProcessImpl() { LOperand::SetUpCaches(); SetUpJSCallerSavedCodeData(); ExternalReference::SetUp(); + Bootstrapper::InitializeOncePerProcess(); } void V8::InitializeOncePerProcess() {