Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: src/api.cc

Issue 15691017: Make assertion scopes thread safe. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/api.h ('k') | src/arm/assembler-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 17 matching lines...) Expand all
28 // TODO(dcarney): remove 28 // TODO(dcarney): remove
29 #define V8_ALLOW_ACCESS_TO_PERSISTENT_IMPLICIT 29 #define V8_ALLOW_ACCESS_TO_PERSISTENT_IMPLICIT
30 30
31 #include "api.h" 31 #include "api.h"
32 32
33 #include <string.h> // For memcpy, strlen. 33 #include <string.h> // For memcpy, strlen.
34 #include <cmath> // For isnan. 34 #include <cmath> // For isnan.
35 #include "../include/v8-debug.h" 35 #include "../include/v8-debug.h"
36 #include "../include/v8-profiler.h" 36 #include "../include/v8-profiler.h"
37 #include "../include/v8-testing.h" 37 #include "../include/v8-testing.h"
38 #include "assert-scope.h"
38 #include "bootstrapper.h" 39 #include "bootstrapper.h"
39 #include "code-stubs.h" 40 #include "code-stubs.h"
40 #include "compiler.h" 41 #include "compiler.h"
41 #include "conversions-inl.h" 42 #include "conversions-inl.h"
42 #include "counters.h" 43 #include "counters.h"
43 #include "debug.h" 44 #include "debug.h"
44 #include "deoptimizer.h" 45 #include "deoptimizer.h"
45 #include "execution.h" 46 #include "execution.h"
46 #include "global-handles.h" 47 #include "global-handles.h"
47 #include "heap-profiler.h" 48 #include "heap-profiler.h"
(...skipping 5051 matching lines...) Expand 10 before | Expand all | Expand 10 after
5099 } 5100 }
5100 private: 5101 private:
5101 PersistentHandleVisitor* visitor_; 5102 PersistentHandleVisitor* visitor_;
5102 }; 5103 };
5103 5104
5104 5105
5105 void v8::V8::VisitHandlesWithClassIds(PersistentHandleVisitor* visitor) { 5106 void v8::V8::VisitHandlesWithClassIds(PersistentHandleVisitor* visitor) {
5106 i::Isolate* isolate = i::Isolate::Current(); 5107 i::Isolate* isolate = i::Isolate::Current();
5107 IsDeadCheck(isolate, "v8::V8::VisitHandlesWithClassId"); 5108 IsDeadCheck(isolate, "v8::V8::VisitHandlesWithClassId");
5108 5109
5109 i::AssertNoAllocation no_allocation; 5110 i::DisallowHeapAllocation no_allocation;
5110 5111
5111 VisitorAdapter visitor_adapter(visitor); 5112 VisitorAdapter visitor_adapter(visitor);
5112 isolate->global_handles()->IterateAllRootsWithClassIds(&visitor_adapter); 5113 isolate->global_handles()->IterateAllRootsWithClassIds(&visitor_adapter);
5113 } 5114 }
5114 5115
5115 5116
5116 void v8::V8::VisitHandlesForPartialDependence( 5117 void v8::V8::VisitHandlesForPartialDependence(
5117 Isolate* exported_isolate, PersistentHandleVisitor* visitor) { 5118 Isolate* exported_isolate, PersistentHandleVisitor* visitor) {
5118 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(exported_isolate); 5119 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(exported_isolate);
5119 ASSERT(isolate == i::Isolate::Current()); 5120 ASSERT(isolate == i::Isolate::Current());
5120 IsDeadCheck(isolate, "v8::V8::VisitHandlesForPartialDependence"); 5121 IsDeadCheck(isolate, "v8::V8::VisitHandlesForPartialDependence");
5121 5122
5122 i::AssertNoAllocation no_allocation; 5123 i::DisallowHeapAllocation no_allocation;
5123 5124
5124 VisitorAdapter visitor_adapter(visitor); 5125 VisitorAdapter visitor_adapter(visitor);
5125 isolate->global_handles()->IterateAllRootsInNewSpaceWithClassIds( 5126 isolate->global_handles()->IterateAllRootsInNewSpaceWithClassIds(
5126 &visitor_adapter); 5127 &visitor_adapter);
5127 } 5128 }
5128 5129
5129 5130
5130 bool v8::V8::IdleNotification(int hint) { 5131 bool v8::V8::IdleNotification(int hint) {
5131 // Returning true tells the caller that it need not 5132 // Returning true tells the caller that it need not
5132 // continue to call IdleNotification. 5133 // continue to call IdleNotification.
(...skipping 1130 matching lines...) Expand 10 before | Expand all | Expand 10 after
6263 if (fits_into_int32_t) { 6264 if (fits_into_int32_t) {
6264 return Integer::New(static_cast<int32_t>(value), isolate); 6265 return Integer::New(static_cast<int32_t>(value), isolate);
6265 } 6266 }
6266 ENTER_V8(internal_isolate); 6267 ENTER_V8(internal_isolate);
6267 i::Handle<i::Object> result = internal_isolate->factory()->NewNumber(value); 6268 i::Handle<i::Object> result = internal_isolate->factory()->NewNumber(value);
6268 return Utils::IntegerToLocal(result); 6269 return Utils::IntegerToLocal(result);
6269 } 6270 }
6270 6271
6271 6272
6272 #ifdef DEBUG 6273 #ifdef DEBUG
6273 v8::AssertNoGCScope::AssertNoGCScope(v8::Isolate* isolate) 6274 v8::AssertNoGCScope::AssertNoGCScope(v8::Isolate* isolate) {
6274 : isolate_(isolate), 6275 disallow_heap_allocation_ = new i::DisallowHeapAllocation();
6275 last_state_(i::EnterAllocationScope(
6276 reinterpret_cast<i::Isolate*>(isolate), false)) {
6277 } 6276 }
6278 6277
6279 v8::AssertNoGCScope::~AssertNoGCScope() { 6278 v8::AssertNoGCScope::~AssertNoGCScope() {
6280 i::ExitAllocationScope(reinterpret_cast<i::Isolate*>(isolate_), last_state_); 6279 delete
6280 reinterpret_cast<i::DisallowHeapAllocation*>(disallow_heap_allocation_);
Sven Panne 2013/06/03 14:11:46 I think this has to be a static_cast, IIRC.
6281 } 6281 }
6282 #endif 6282 #endif
6283 6283
6284 6284
6285 void V8::IgnoreOutOfMemoryException() { 6285 void V8::IgnoreOutOfMemoryException() {
6286 EnterIsolateIfNeeded()->set_ignore_out_of_memory(true); 6286 EnterIsolateIfNeeded()->set_ignore_out_of_memory(true);
6287 } 6287 }
6288 6288
6289 6289
6290 bool V8::AddMessageListener(MessageCallback that, Handle<Value> data) { 6290 bool V8::AddMessageListener(MessageCallback that, Handle<Value> data) {
(...skipping 1511 matching lines...) Expand 10 before | Expand all | Expand 10 after
7802 } 7802 }
7803 7803
7804 7804
7805 DeferredHandles* HandleScopeImplementer::Detach(Object** prev_limit) { 7805 DeferredHandles* HandleScopeImplementer::Detach(Object** prev_limit) {
7806 DeferredHandles* deferred = 7806 DeferredHandles* deferred =
7807 new DeferredHandles(isolate()->handle_scope_data()->next, isolate()); 7807 new DeferredHandles(isolate()->handle_scope_data()->next, isolate());
7808 7808
7809 while (!blocks_.is_empty()) { 7809 while (!blocks_.is_empty()) {
7810 Object** block_start = blocks_.last(); 7810 Object** block_start = blocks_.last();
7811 Object** block_limit = &block_start[kHandleBlockSize]; 7811 Object** block_limit = &block_start[kHandleBlockSize];
7812 // We should not need to check for NoHandleAllocation here. Assert 7812 // We should not need to check for SealHandleScope here. Assert this.
7813 // this.
7814 ASSERT(prev_limit == block_limit || 7813 ASSERT(prev_limit == block_limit ||
7815 !(block_start <= prev_limit && prev_limit <= block_limit)); 7814 !(block_start <= prev_limit && prev_limit <= block_limit));
7816 if (prev_limit == block_limit) break; 7815 if (prev_limit == block_limit) break;
7817 deferred->blocks_.Add(blocks_.last()); 7816 deferred->blocks_.Add(blocks_.last());
7818 blocks_.RemoveLast(); 7817 blocks_.RemoveLast();
7819 } 7818 }
7820 7819
7821 // deferred->blocks_ now contains the blocks installed on the 7820 // deferred->blocks_ now contains the blocks installed on the
7822 // HandleScope stack since BeginDeferredScope was called, but in 7821 // HandleScope stack since BeginDeferredScope was called, but in
7823 // reverse order. 7822 // reverse order.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
7857 7856
7858 v->VisitPointers(blocks_.first(), first_block_limit_); 7857 v->VisitPointers(blocks_.first(), first_block_limit_);
7859 7858
7860 for (int i = 1; i < blocks_.length(); i++) { 7859 for (int i = 1; i < blocks_.length(); i++) {
7861 v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]); 7860 v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]);
7862 } 7861 }
7863 } 7862 }
7864 7863
7865 7864
7866 } } // namespace v8::internal 7865 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/arm/assembler-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698