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

Side by Side Diff: Source/platform/heap/Handle.h

Issue 393823003: Revert "Revert "[oilpan]: Make thread shutdown more robust."" (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: remove redundant NO_SANITIZE_ADDRESS Created 6 years, 5 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 | Source/platform/heap/Heap.h » ('j') | Source/platform/heap/Heap.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 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 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 m_prev->m_next = this; 202 m_prev->m_next = this;
203 m_next->m_prev = this; 203 m_next->m_prev = this;
204 } 204 }
205 205
206 inline explicit PersistentBase(const PersistentBase& otherref) 206 inline explicit PersistentBase(const PersistentBase& otherref)
207 : PersistentNode(otherref.m_trace) 207 : PersistentNode(otherref.m_trace)
208 #ifndef NDEBUG 208 #ifndef NDEBUG
209 , m_roots(RootsAccessor::roots()) 209 , m_roots(RootsAccessor::roots())
210 #endif 210 #endif
211 { 211 {
212 // We don't support allocation of thread local Persistents while doing
213 // thread shutdown/cleanup.
214 ASSERT(!ThreadState::current()->isTerminating());
212 typename RootsAccessor::Lock lock; 215 typename RootsAccessor::Lock lock;
213 ASSERT(otherref.m_roots == m_roots); // Handles must belong to the same list. 216 ASSERT(otherref.m_roots == m_roots); // Handles must belong to the same list.
214 PersistentBase* other = const_cast<PersistentBase*>(&otherref); 217 PersistentBase* other = const_cast<PersistentBase*>(&otherref);
215 m_prev = other; 218 m_prev = other;
216 m_next = other->m_next; 219 m_next = other->m_next;
217 other->m_next = this; 220 other->m_next = this;
218 m_next->m_prev = this; 221 m_next->m_prev = this;
219 } 222 }
220 223
221 inline PersistentBase& operator=(const PersistentBase& otherref) { return *t his; } 224 inline PersistentBase& operator=(const PersistentBase& otherref) { return *t his; }
222 225
223 #ifndef NDEBUG 226 #ifndef NDEBUG
224 private: 227 private:
225 PersistentNode* m_roots; 228 PersistentNode* m_roots;
226 #endif 229 #endif
227 }; 230 };
228 231
229 // A dummy Persistent handle that ensures the list of persistents is never null. 232 // A dummy Persistent handle that ensures the list of persistents is never null.
230 // This removes a test from a hot path. 233 // This removes a test from a hot path.
231 class PersistentAnchor : public PersistentNode { 234 class PersistentAnchor : public PersistentNode {
232 public: 235 public:
233 void trace(Visitor* visitor) 236 void trace(Visitor* visitor)
234 { 237 {
235 for (PersistentNode* current = m_next; current != this; current = curren t->m_next) 238 for (PersistentNode* current = m_next; current != this; current = curren t->m_next)
236 current->trace(visitor); 239 current->trace(visitor);
237 } 240 }
238 241
242 int numberOfPersistents()
243 {
244 int numberOfPersistents = 0;
245 for (PersistentNode* current = m_next; current != this; current = curren t->m_next)
246 ++numberOfPersistents;
247 return numberOfPersistents;
248 }
249
239 virtual ~PersistentAnchor() 250 virtual ~PersistentAnchor()
240 { 251 {
241 // FIXME: oilpan: Ideally we should have no left-over persistents at thi s point. However currently there is a 252 // FIXME: oilpan: Ideally we should have no left-over persistents at thi s point. However currently there is a
242 // large number of objects leaked when we tear down the main thread. Sin ce some of these might contain a 253 // large number of objects leaked when we tear down the main thread. Sin ce some of these might contain a
243 // persistent or e.g. be RefCountedGarbageCollected we cannot guarantee there are no remaining Persistents at 254 // persistent or e.g. be RefCountedGarbageCollected we cannot guarantee there are no remaining Persistents at
244 // this point. 255 // this point.
245 } 256 }
246 257
247 private: 258 private:
248 PersistentAnchor() : PersistentNode(TraceMethodDelegate<PersistentAnchor, &P ersistentAnchor::trace>::trampoline) 259 PersistentAnchor() : PersistentNode(TraceMethodDelegate<PersistentAnchor, &P ersistentAnchor::trace>::trampoline)
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
1163 struct ParamStorageTraits<T*> : public PointerParamStorageTraits<T*, WebCore::Is GarbageCollectedType<T>::value> { 1174 struct ParamStorageTraits<T*> : public PointerParamStorageTraits<T*, WebCore::Is GarbageCollectedType<T>::value> {
1164 }; 1175 };
1165 1176
1166 template<typename T> 1177 template<typename T>
1167 struct ParamStorageTraits<RawPtr<T> > : public PointerParamStorageTraits<T*, Web Core::IsGarbageCollectedType<T>::value> { 1178 struct ParamStorageTraits<RawPtr<T> > : public PointerParamStorageTraits<T*, Web Core::IsGarbageCollectedType<T>::value> {
1168 }; 1179 };
1169 1180
1170 } // namespace WTF 1181 } // namespace WTF
1171 1182
1172 #endif 1183 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/platform/heap/Heap.h » ('j') | Source/platform/heap/Heap.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698