| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 } | 338 } |
| 339 | 339 |
| 340 Isolate* Isolate::default_isolate_ = NULL; | 340 Isolate* Isolate::default_isolate_ = NULL; |
| 341 Thread::LocalStorageKey Isolate::isolate_key_; | 341 Thread::LocalStorageKey Isolate::isolate_key_; |
| 342 Thread::LocalStorageKey Isolate::thread_id_key_; | 342 Thread::LocalStorageKey Isolate::thread_id_key_; |
| 343 Thread::LocalStorageKey Isolate::per_isolate_thread_data_key_; | 343 Thread::LocalStorageKey Isolate::per_isolate_thread_data_key_; |
| 344 #ifdef DEBUG | 344 #ifdef DEBUG |
| 345 Thread::LocalStorageKey PerThreadAssertScopeBase::thread_local_key; | 345 Thread::LocalStorageKey PerThreadAssertScopeBase::thread_local_key; |
| 346 #endif // DEBUG | 346 #endif // DEBUG |
| 347 Mutex Isolate::process_wide_mutex_; | 347 Mutex Isolate::process_wide_mutex_; |
| 348 // TODO(dcarney): Remove with default isolate. |
| 349 enum DefaultIsolateStatus { |
| 350 kDefaultIsolateUninitialized, |
| 351 kDefaultIsolateInitialized, |
| 352 kDefaultIsolateCrashIfInitialized |
| 353 }; |
| 354 static DefaultIsolateStatus default_isolate_status_ |
| 355 = kDefaultIsolateUninitialized; |
| 348 Isolate::ThreadDataTable* Isolate::thread_data_table_ = NULL; | 356 Isolate::ThreadDataTable* Isolate::thread_data_table_ = NULL; |
| 349 Atomic32 Isolate::isolate_counter_ = 0; | 357 Atomic32 Isolate::isolate_counter_ = 0; |
| 350 | 358 |
| 351 Isolate::PerIsolateThreadData* | 359 Isolate::PerIsolateThreadData* |
| 352 Isolate::FindOrAllocatePerThreadDataForThisThread() { | 360 Isolate::FindOrAllocatePerThreadDataForThisThread() { |
| 353 ThreadId thread_id = ThreadId::Current(); | 361 ThreadId thread_id = ThreadId::Current(); |
| 354 PerIsolateThreadData* per_thread = NULL; | 362 PerIsolateThreadData* per_thread = NULL; |
| 355 { | 363 { |
| 356 LockGuard<Mutex> lock_guard(&process_wide_mutex_); | 364 LockGuard<Mutex> lock_guard(&process_wide_mutex_); |
| 357 per_thread = thread_data_table_->Lookup(this, thread_id); | 365 per_thread = thread_data_table_->Lookup(this, thread_id); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 375 ThreadId thread_id) { | 383 ThreadId thread_id) { |
| 376 PerIsolateThreadData* per_thread = NULL; | 384 PerIsolateThreadData* per_thread = NULL; |
| 377 { | 385 { |
| 378 LockGuard<Mutex> lock_guard(&process_wide_mutex_); | 386 LockGuard<Mutex> lock_guard(&process_wide_mutex_); |
| 379 per_thread = thread_data_table_->Lookup(this, thread_id); | 387 per_thread = thread_data_table_->Lookup(this, thread_id); |
| 380 } | 388 } |
| 381 return per_thread; | 389 return per_thread; |
| 382 } | 390 } |
| 383 | 391 |
| 384 | 392 |
| 393 void Isolate::SetCrashIfDefaultIsolateInitialized() { |
| 394 LockGuard<Mutex> lock_guard(&process_wide_mutex_); |
| 395 CHECK(default_isolate_status_ != kDefaultIsolateInitialized); |
| 396 default_isolate_status_ = kDefaultIsolateCrashIfInitialized; |
| 397 } |
| 398 |
| 399 |
| 385 void Isolate::EnsureDefaultIsolate() { | 400 void Isolate::EnsureDefaultIsolate() { |
| 386 LockGuard<Mutex> lock_guard(&process_wide_mutex_); | 401 LockGuard<Mutex> lock_guard(&process_wide_mutex_); |
| 402 CHECK(default_isolate_status_ != kDefaultIsolateCrashIfInitialized); |
| 387 if (default_isolate_ == NULL) { | 403 if (default_isolate_ == NULL) { |
| 388 isolate_key_ = Thread::CreateThreadLocalKey(); | 404 isolate_key_ = Thread::CreateThreadLocalKey(); |
| 389 thread_id_key_ = Thread::CreateThreadLocalKey(); | 405 thread_id_key_ = Thread::CreateThreadLocalKey(); |
| 390 per_isolate_thread_data_key_ = Thread::CreateThreadLocalKey(); | 406 per_isolate_thread_data_key_ = Thread::CreateThreadLocalKey(); |
| 391 #ifdef DEBUG | 407 #ifdef DEBUG |
| 392 PerThreadAssertScopeBase::thread_local_key = Thread::CreateThreadLocalKey(); | 408 PerThreadAssertScopeBase::thread_local_key = Thread::CreateThreadLocalKey(); |
| 393 #endif // DEBUG | 409 #endif // DEBUG |
| 394 thread_data_table_ = new Isolate::ThreadDataTable(); | 410 thread_data_table_ = new Isolate::ThreadDataTable(); |
| 395 default_isolate_ = new Isolate(); | 411 default_isolate_ = new Isolate(); |
| 396 } | 412 } |
| (...skipping 2129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2526 | 2542 |
| 2527 #ifdef DEBUG | 2543 #ifdef DEBUG |
| 2528 #define ISOLATE_FIELD_OFFSET(type, name, ignored) \ | 2544 #define ISOLATE_FIELD_OFFSET(type, name, ignored) \ |
| 2529 const intptr_t Isolate::name##_debug_offset_ = OFFSET_OF(Isolate, name##_); | 2545 const intptr_t Isolate::name##_debug_offset_ = OFFSET_OF(Isolate, name##_); |
| 2530 ISOLATE_INIT_LIST(ISOLATE_FIELD_OFFSET) | 2546 ISOLATE_INIT_LIST(ISOLATE_FIELD_OFFSET) |
| 2531 ISOLATE_INIT_ARRAY_LIST(ISOLATE_FIELD_OFFSET) | 2547 ISOLATE_INIT_ARRAY_LIST(ISOLATE_FIELD_OFFSET) |
| 2532 #undef ISOLATE_FIELD_OFFSET | 2548 #undef ISOLATE_FIELD_OFFSET |
| 2533 #endif | 2549 #endif |
| 2534 | 2550 |
| 2535 } } // namespace v8::internal | 2551 } } // namespace v8::internal |
| OLD | NEW |