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

Side by Side Diff: src/global-handles.cc

Issue 1628173002: Don't NULL-check GlobalHandle::Node::object_ (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 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
« no previous file with comments | « no previous file | test/cctest/test-global-handles.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 2009 the V8 project authors. All rights reserved. 1 // Copyright 2009 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/global-handles.h" 5 #include "src/global-handles.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/v8.h" 8 #include "src/v8.h"
9 #include "src/vm-state-inl.h" 9 #include "src/vm-state-inl.h"
10 10
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 } else { 71 } else {
72 set_partially_dependent(false); 72 set_partially_dependent(false);
73 } 73 }
74 set_in_new_space_list(false); 74 set_in_new_space_list(false);
75 parameter_or_next_free_.next_free = NULL; 75 parameter_or_next_free_.next_free = NULL;
76 weak_callback_ = NULL; 76 weak_callback_ = NULL;
77 } 77 }
78 #endif 78 #endif
79 79
80 void Initialize(int index, Node** first_free) { 80 void Initialize(int index, Node** first_free) {
81 object_ = reinterpret_cast<Object*>(kGlobalHandleZapValue);
vogelheim 2016/01/25 12:00:19 nitpick: Wouldn't it be better for debugging to di
jochen (gone - plz use gerrit) 2016/01/25 13:05:48 since we recycle handles, they're expected to cons
81 index_ = static_cast<uint8_t>(index); 82 index_ = static_cast<uint8_t>(index);
82 DCHECK(static_cast<int>(index_) == index); 83 DCHECK(static_cast<int>(index_) == index);
83 set_state(FREE); 84 set_state(FREE);
84 set_weakness_type(NORMAL_WEAK); 85 set_weakness_type(NORMAL_WEAK);
85 set_in_new_space_list(false); 86 set_in_new_space_list(false);
86 parameter_or_next_free_.next_free = *first_free; 87 parameter_or_next_free_.next_free = *first_free;
87 *first_free = this; 88 *first_free = this;
88 } 89 }
89 90
90 void Acquire(Object* object) { 91 void Acquire(Object* object) {
91 DCHECK(state() == FREE); 92 DCHECK(state() == FREE);
92 object_ = object; 93 object_ = object;
vogelheim 2016/01/25 12:00:19 Maybe DCHECK(object != nullptr)?
jochen (gone - plz use gerrit) 2016/01/25 13:05:48 nullptr is valid here (since that's Smi::FromInt(0
93 class_id_ = v8::HeapProfiler::kPersistentHandleNoClassId; 94 class_id_ = v8::HeapProfiler::kPersistentHandleNoClassId;
94 set_independent(false); 95 set_independent(false);
95 if (FLAG_scavenge_reclaim_unmodified_objects) { 96 if (FLAG_scavenge_reclaim_unmodified_objects) {
96 set_active(false); 97 set_active(false);
97 } else { 98 } else {
98 set_partially_dependent(false); 99 set_partially_dependent(false);
99 } 100 }
100 set_state(NORMAL); 101 set_state(NORMAL);
101 parameter_or_next_free_.parameter = NULL; 102 parameter_or_next_free_.parameter = NULL;
102 weak_callback_ = NULL; 103 weak_callback_ = NULL;
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 Node* next_free() { 244 Node* next_free() {
244 DCHECK(state() == FREE); 245 DCHECK(state() == FREE);
245 return parameter_or_next_free_.next_free; 246 return parameter_or_next_free_.next_free;
246 } 247 }
247 void set_next_free(Node* value) { 248 void set_next_free(Node* value) {
248 DCHECK(state() == FREE); 249 DCHECK(state() == FREE);
249 parameter_or_next_free_.next_free = value; 250 parameter_or_next_free_.next_free = value;
250 } 251 }
251 252
252 void MakeWeak(void* parameter, WeakCallback weak_callback) { 253 void MakeWeak(void* parameter, WeakCallback weak_callback) {
253 DCHECK(weak_callback != NULL); 254 DCHECK(weak_callback != nullptr);
254 DCHECK(IsInUse()); 255 DCHECK(IsInUse());
255 CHECK(object_ != NULL); 256 CHECK_NE(object_, reinterpret_cast<Object*>(kGlobalHandleZapValue));
256 set_state(WEAK); 257 set_state(WEAK);
257 set_weakness_type(NORMAL_WEAK); 258 set_weakness_type(NORMAL_WEAK);
258 set_parameter(parameter); 259 set_parameter(parameter);
259 weak_callback_ = weak_callback; 260 weak_callback_ = weak_callback;
260 } 261 }
261 262
262 void MakeWeak(void* parameter, 263 void MakeWeak(void* parameter,
263 WeakCallbackInfo<void>::Callback phantom_callback, 264 WeakCallbackInfo<void>::Callback phantom_callback,
264 v8::WeakCallbackType type) { 265 v8::WeakCallbackType type) {
265 DCHECK(phantom_callback != nullptr); 266 DCHECK(phantom_callback != nullptr);
266 DCHECK(IsInUse()); 267 DCHECK(IsInUse());
267 CHECK(object_ != nullptr); 268 CHECK_NE(object_, reinterpret_cast<Object*>(kGlobalHandleZapValue));
268 set_state(WEAK); 269 set_state(WEAK);
269 switch (type) { 270 switch (type) {
270 case v8::WeakCallbackType::kParameter: 271 case v8::WeakCallbackType::kParameter:
271 set_weakness_type(PHANTOM_WEAK); 272 set_weakness_type(PHANTOM_WEAK);
272 break; 273 break;
273 case v8::WeakCallbackType::kInternalFields: 274 case v8::WeakCallbackType::kInternalFields:
274 set_weakness_type(PHANTOM_WEAK_2_INTERNAL_FIELDS); 275 set_weakness_type(PHANTOM_WEAK_2_INTERNAL_FIELDS);
275 break; 276 break;
276 } 277 }
277 set_parameter(parameter); 278 set_parameter(parameter);
(...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after
1376 blocks_[block][offset] = object; 1377 blocks_[block][offset] = object;
1377 if (isolate->heap()->InNewSpace(object)) { 1378 if (isolate->heap()->InNewSpace(object)) {
1378 new_space_indices_.Add(size_); 1379 new_space_indices_.Add(size_);
1379 } 1380 }
1380 *index = size_++; 1381 *index = size_++;
1381 } 1382 }
1382 1383
1383 1384
1384 } // namespace internal 1385 } // namespace internal
1385 } // namespace v8 1386 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/cctest/test-global-handles.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698