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

Side by Side Diff: third_party/WebKit/Source/platform/heap/Heap.h

Issue 2012763002: Add checks for per thread heap (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/platform/heap/Heap.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 static inline bool isHeapObjectAlive(T* object) 195 static inline bool isHeapObjectAlive(T* object)
196 { 196 {
197 static_assert(sizeof(T), "T must be fully defined"); 197 static_assert(sizeof(T), "T must be fully defined");
198 // The strongification of collections relies on the fact that once a 198 // The strongification of collections relies on the fact that once a
199 // collection has been strongified, there is no way that it can contain 199 // collection has been strongified, there is no way that it can contain
200 // non-live entries, so no entries will be removed. Since you can't set 200 // non-live entries, so no entries will be removed. Since you can't set
201 // the mark bit on a null pointer, that means that null pointers are 201 // the mark bit on a null pointer, that means that null pointers are
202 // always 'alive'. 202 // always 'alive'.
203 if (!object) 203 if (!object)
204 return true; 204 return true;
205 // TODO(keishi): some tests create CrossThreadPersistent on non attached threads.
keishi 2016/05/26 04:33:02 The tests that require this are: ExtensionApiTest.
haraken 2016/05/26 07:52:29 Conceptually it should be valid to support CrossTh
keishi 2016/05/26 11:52:54 OK. Leaving the TODO comment.
206 if (!ThreadState::current())
207 return true;
208 if (&ThreadState::current()->heap() != &pageFromObject(object)->arena()- >getThreadState()->heap())
209 return true;
haraken 2016/05/25 15:41:22 Would you help me understand why we need to add th
keishi 2016/05/26 04:29:38 Added this while debugging but it looks like it wa
205 return ObjectAliveTrait<T>::isHeapObjectAlive(object); 210 return ObjectAliveTrait<T>::isHeapObjectAlive(object);
206 } 211 }
207 template<typename T> 212 template<typename T>
208 static inline bool isHeapObjectAlive(const Member<T>& member) 213 static inline bool isHeapObjectAlive(const Member<T>& member)
209 { 214 {
210 return isHeapObjectAlive(member.get()); 215 return isHeapObjectAlive(member.get());
211 } 216 }
212 template<typename T> 217 template<typename T>
213 static inline bool isHeapObjectAlive(const WeakMember<T>& member) 218 static inline bool isHeapObjectAlive(const WeakMember<T>& member)
214 { 219 {
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 void VisitorHelper<Derived>::handleWeakCell(Visitor* self, void* object) 599 void VisitorHelper<Derived>::handleWeakCell(Visitor* self, void* object)
595 { 600 {
596 T** cell = reinterpret_cast<T**>(object); 601 T** cell = reinterpret_cast<T**>(object);
597 if (*cell && !ObjectAliveTrait<T>::isHeapObjectAlive(*cell)) 602 if (*cell && !ObjectAliveTrait<T>::isHeapObjectAlive(*cell))
598 *cell = nullptr; 603 *cell = nullptr;
599 } 604 }
600 605
601 } // namespace blink 606 } // namespace blink
602 607
603 #endif // Heap_h 608 #endif // Heap_h
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/platform/heap/Heap.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698