From 5ec767d037190c2e89a3f2ba13bc48017f357a41 Mon Sep 17 00:00:00 2001 From: "whesse@chromium.org" Date: Fri, 2 Oct 2009 11:39:56 +0000 Subject: [PATCH] Ensure V8 is initialized before locking and unlocking threads. Review URL: http://codereview.chromium.org/242123 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3008 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/v8threads.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/v8threads.cc b/src/v8threads.cc index 375afb1..80a7cd9 100644 --- a/src/v8threads.cc +++ b/src/v8threads.cc @@ -56,6 +56,12 @@ Locker::Locker() : has_lock_(false), top_level_(true) { if (!internal::ThreadManager::IsLockedByCurrentThread()) { internal::ThreadManager::Lock(); has_lock_ = true; + // Make sure that V8 is initialized. Archiving of threads interferes + // with deserialization by adding additional root pointers, so we must + // initialize here, before anyone can call ~Locker() or Unlocker(). + if (!internal::V8::IsRunning()) { + V8::Initialize(); + } // This may be a locker within an unlocker in which case we have to // get the saved state for this thread and restore it. if (internal::ThreadManager::RestoreThread()) { -- 2.7.4