Commit 5ec767d0 authored by whesse@chromium.org's avatar whesse@chromium.org

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
parent 0437bfcf
...@@ -56,6 +56,12 @@ Locker::Locker() : has_lock_(false), top_level_(true) { ...@@ -56,6 +56,12 @@ Locker::Locker() : has_lock_(false), top_level_(true) {
if (!internal::ThreadManager::IsLockedByCurrentThread()) { if (!internal::ThreadManager::IsLockedByCurrentThread()) {
internal::ThreadManager::Lock(); internal::ThreadManager::Lock();
has_lock_ = true; 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 // This may be a locker within an unlocker in which case we have to
// get the saved state for this thread and restore it. // get the saved state for this thread and restore it.
if (internal::ThreadManager::RestoreThread()) { if (internal::ThreadManager::RestoreThread()) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment