| Index: test/cctest/test-lockers.cc
|
| diff --git a/test/cctest/test-lockers.cc b/test/cctest/test-lockers.cc
|
| index a54390bf4e92a6cd133aa22cdd67581e2b7113a5..a619c858849cc973ae250e2b6ba995710f2bb354 100644
|
| --- a/test/cctest/test-lockers.cc
|
| +++ b/test/cctest/test-lockers.cc
|
| @@ -33,6 +33,7 @@
|
| #include "isolate.h"
|
| #include "compilation-cache.h"
|
| #include "execution.h"
|
| +#include "smart-pointers.h"
|
| #include "snapshot.h"
|
| #include "platform.h"
|
| #include "utils.h"
|
| @@ -58,11 +59,10 @@ using ::v8::V8;
|
| // Migrating an isolate
|
| class KangarooThread : public v8::internal::Thread {
|
| public:
|
| - KangarooThread(v8::Isolate* isolate,
|
| - v8::Handle<v8::Context> context)
|
| + KangarooThread(v8::Isolate* isolate, v8::Handle<v8::Context> context)
|
| : Thread("KangarooThread"),
|
| - isolate_(isolate), context_(context) {
|
| - }
|
| + isolate_(isolate),
|
| + context_(isolate, context) {}
|
|
|
| void Run() {
|
| {
|
| @@ -95,19 +95,19 @@ class KangarooThread : public v8::internal::Thread {
|
| // Migrates an isolate from one thread to another
|
| TEST(KangarooIsolates) {
|
| v8::Isolate* isolate = v8::Isolate::New();
|
| - Persistent<v8::Context> context;
|
| + i::SmartPointer<KangarooThread> thread1;
|
| {
|
| v8::Locker locker(isolate);
|
| v8::Isolate::Scope isolate_scope(isolate);
|
| v8::HandleScope handle_scope(isolate);
|
| - context = v8::Context::New();
|
| + v8::Local<v8::Context> context = v8::Context::New(isolate);
|
| v8::Context::Scope context_scope(context);
|
| CHECK_EQ(isolate, v8::internal::Isolate::Current());
|
| CompileRun("function getValue() { return 30; }");
|
| + thread1.Reset(new KangarooThread(isolate, context));
|
| }
|
| - KangarooThread thread1(isolate, context);
|
| - thread1.Start();
|
| - thread1.Join();
|
| + thread1->Start();
|
| + thread1->Join();
|
| }
|
|
|
| static void CalcFibAndCheck() {
|
| @@ -342,7 +342,7 @@ class LockIsolateAndCalculateFibSharedContextThread : public JoinableThread {
|
| v8::Isolate* isolate, v8::Handle<v8::Context> context)
|
| : JoinableThread("LockIsolateAndCalculateFibThread"),
|
| isolate_(isolate),
|
| - context_(context) {
|
| + context_(isolate, context) {
|
| }
|
|
|
| virtual void Run() {
|
| @@ -368,15 +368,15 @@ class LockerUnlockerThread : public JoinableThread {
|
| v8::Locker lock(isolate_);
|
| v8::Isolate::Scope isolate_scope(isolate_);
|
| v8::HandleScope handle_scope(isolate_);
|
| - v8::Handle<v8::Context> context = v8::Context::New();
|
| + v8::Local<v8::Context> context = v8::Context::New(isolate_);
|
| {
|
| v8::Context::Scope context_scope(context);
|
| CalcFibAndCheck();
|
| }
|
| {
|
| + LockIsolateAndCalculateFibSharedContextThread thread(isolate_, context);
|
| isolate_->Exit();
|
| v8::Unlocker unlocker(isolate_);
|
| - LockIsolateAndCalculateFibSharedContextThread thread(isolate_, context);
|
| thread.Start();
|
| thread.Join();
|
| }
|
| @@ -418,7 +418,7 @@ class LockTwiceAndUnlockThread : public JoinableThread {
|
| v8::Locker lock(isolate_);
|
| v8::Isolate::Scope isolate_scope(isolate_);
|
| v8::HandleScope handle_scope(isolate_);
|
| - v8::Handle<v8::Context> context = v8::Context::New();
|
| + v8::Local<v8::Context> context = v8::Context::New(isolate_);
|
| {
|
| v8::Context::Scope context_scope(context);
|
| CalcFibAndCheck();
|
| @@ -426,9 +426,9 @@ class LockTwiceAndUnlockThread : public JoinableThread {
|
| {
|
| v8::Locker second_lock(isolate_);
|
| {
|
| + LockIsolateAndCalculateFibSharedContextThread thread(isolate_, context);
|
| isolate_->Exit();
|
| v8::Unlocker unlocker(isolate_);
|
| - LockIsolateAndCalculateFibSharedContextThread thread(isolate_, context);
|
| thread.Start();
|
| thread.Join();
|
| }
|
| @@ -497,16 +497,23 @@ class LockAndUnlockDifferentIsolatesThread : public JoinableThread {
|
| }
|
| }
|
| {
|
| + i::SmartPointer<LockIsolateAndCalculateFibSharedContextThread> thread;
|
| + {
|
| + CHECK(v8::Locker::IsLocked(isolate1_));
|
| + v8::Isolate::Scope isolate_scope(isolate1_);
|
| + v8::HandleScope handle_scope(isolate1_);
|
| + thread.Reset(new LockIsolateAndCalculateFibSharedContextThread(
|
| + isolate1_, v8::Local<v8::Context>::New(isolate1_, context1)));
|
| + }
|
| v8::Unlocker unlock1(isolate1_);
|
| CHECK(!v8::Locker::IsLocked(isolate1_));
|
| CHECK(v8::Locker::IsLocked(isolate2_));
|
| v8::Isolate::Scope isolate_scope(isolate2_);
|
| v8::HandleScope handle_scope(isolate2_);
|
| v8::Context::Scope context_scope(context2);
|
| - LockIsolateAndCalculateFibSharedContextThread thread(isolate1_, context1);
|
| - thread.Start();
|
| + thread->Start();
|
| CalcFibAndCheck();
|
| - thread.Join();
|
| + thread->Join();
|
| }
|
| }
|
|
|
| @@ -528,10 +535,10 @@ TEST(LockAndUnlockDifferentIsolates) {
|
|
|
| class LockUnlockLockThread : public JoinableThread {
|
| public:
|
| - LockUnlockLockThread(v8::Isolate* isolate, v8::Handle<v8::Context> context)
|
| + LockUnlockLockThread(v8::Isolate* isolate, v8::Local<v8::Context> context)
|
| : JoinableThread("LockUnlockLockThread"),
|
| isolate_(isolate),
|
| - context_(context) {
|
| + context_(isolate, context) {
|
| }
|
|
|
| virtual void Run() {
|
| @@ -574,15 +581,16 @@ TEST(LockUnlockLockMultithreaded) {
|
| #endif
|
| v8::Isolate* isolate = v8::Isolate::New();
|
| Persistent<v8::Context> context;
|
| + i::List<JoinableThread*> threads(kNThreads);
|
| {
|
| v8::Locker locker_(isolate);
|
| v8::Isolate::Scope isolate_scope(isolate);
|
| v8::HandleScope handle_scope(isolate);
|
| context = v8::Context::New();
|
| - }
|
| - i::List<JoinableThread*> threads(kNThreads);
|
| - for (int i = 0; i < kNThreads; i++) {
|
| - threads.Add(new LockUnlockLockThread(isolate, context));
|
| + for (int i = 0; i < kNThreads; i++) {
|
| + threads.Add(new LockUnlockLockThread(
|
| + isolate, v8::Local<v8::Context>::New(isolate, context)));
|
| + }
|
| }
|
| StartJoinAndDeleteThreads(threads);
|
| isolate->Dispose();
|
| @@ -590,10 +598,9 @@ TEST(LockUnlockLockMultithreaded) {
|
|
|
| class LockUnlockLockDefaultIsolateThread : public JoinableThread {
|
| public:
|
| - explicit LockUnlockLockDefaultIsolateThread(v8::Handle<v8::Context> context)
|
| - : JoinableThread("LockUnlockLockDefaultIsolateThread"),
|
| - context_(context) {
|
| - }
|
| + explicit LockUnlockLockDefaultIsolateThread(v8::Local<v8::Context> context)
|
| + : JoinableThread("LockUnlockLockDefaultIsolateThread"),
|
| + context_(CcTest::default_isolate(), context) {}
|
|
|
| virtual void Run() {
|
| v8::Locker lock1(CcTest::default_isolate());
|
| @@ -625,14 +632,15 @@ TEST(LockUnlockLockDefaultIsolateMultithreaded) {
|
| const int kNThreads = 100;
|
| #endif
|
| Persistent<v8::Context> context;
|
| + i::List<JoinableThread*> threads(kNThreads);
|
| {
|
| v8::Locker locker_(CcTest::default_isolate());
|
| v8::HandleScope handle_scope(CcTest::default_isolate());
|
| context = v8::Context::New();
|
| - }
|
| - i::List<JoinableThread*> threads(kNThreads);
|
| - for (int i = 0; i < kNThreads; i++) {
|
| - threads.Add(new LockUnlockLockDefaultIsolateThread(context));
|
| + for (int i = 0; i < kNThreads; i++) {
|
| + threads.Add(new LockUnlockLockDefaultIsolateThread(
|
| + v8::Local<v8::Context>::New(CcTest::default_isolate(), context)));
|
| + }
|
| }
|
| StartJoinAndDeleteThreads(threads);
|
| }
|
|
|