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

Side by Side Diff: base/memory/weak_ptr.h

Issue 20163004: base: Re-apply WeakPtr support for SequencedWorkerPools, fixing deadlock (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add back death test threadsafe mode flag that got lost. Created 7 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 | « base/base.gyp ('k') | base/memory/weak_ptr.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium 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 // Weak pointers are pointers to an object that do not affect its lifetime, 5 // Weak pointers are pointers to an object that do not affect its lifetime,
6 // and which may be invalidated (i.e. reset to NULL) by the object, or its 6 // and which may be invalidated (i.e. reset to NULL) by the object, or its
7 // owner, at any time, most commonly when the object is about to be deleted. 7 // owner, at any time, most commonly when the object is about to be deleted.
8 8
9 // Weak pointers are useful when an object needs to be accessed safely by one 9 // Weak pointers are useful when an object needs to be accessed safely by one
10 // or more objects other than its owner, and those callers can cope with the 10 // or more objects other than its owner, and those callers can cope with the
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 // Invalidating the factory's WeakPtrs un-binds it from the thread, allowing it 60 // Invalidating the factory's WeakPtrs un-binds it from the thread, allowing it
61 // to be passed for a different thread to use or delete it. 61 // to be passed for a different thread to use or delete it.
62 62
63 #ifndef BASE_MEMORY_WEAK_PTR_H_ 63 #ifndef BASE_MEMORY_WEAK_PTR_H_
64 #define BASE_MEMORY_WEAK_PTR_H_ 64 #define BASE_MEMORY_WEAK_PTR_H_
65 65
66 #include "base/basictypes.h" 66 #include "base/basictypes.h"
67 #include "base/base_export.h" 67 #include "base/base_export.h"
68 #include "base/logging.h" 68 #include "base/logging.h"
69 #include "base/memory/ref_counted.h" 69 #include "base/memory/ref_counted.h"
70 #include "base/sequence_checker.h"
70 #include "base/template_util.h" 71 #include "base/template_util.h"
71 #include "base/threading/thread_checker.h"
72 72
73 namespace base { 73 namespace base {
74 74
75 template <typename T> class SupportsWeakPtr; 75 template <typename T> class SupportsWeakPtr;
76 template <typename T> class WeakPtr; 76 template <typename T> class WeakPtr;
77 77
78 namespace internal { 78 namespace internal {
79 // These classes are part of the WeakPtr implementation. 79 // These classes are part of the WeakPtr implementation.
80 // DO NOT USE THESE CLASSES DIRECTLY YOURSELF. 80 // DO NOT USE THESE CLASSES DIRECTLY YOURSELF.
81 81
82 class BASE_EXPORT WeakReference { 82 class BASE_EXPORT WeakReference {
83 public: 83 public:
84 // Although Flag is bound to a specific thread, it may be deleted from another 84 // Although Flag is bound to a specific thread, it may be deleted from another
85 // via base::WeakPtr::~WeakPtr(). 85 // via base::WeakPtr::~WeakPtr().
86 class Flag : public RefCountedThreadSafe<Flag> { 86 class Flag : public RefCountedThreadSafe<Flag> {
87 public: 87 public:
88 Flag(); 88 Flag();
89 89
90 void Invalidate(); 90 void Invalidate();
91 bool IsValid() const; 91 bool IsValid() const;
92 92
93 // Remove this when crbug.com/234964 is addressed. 93 // Remove this when crbug.com/234964 is addressed.
94 void DetachFromThreadHack() { thread_checker_.DetachFromThread(); } 94 void DetachFromThreadHack() { sequence_checker_.DetachFromSequence(); }
95 95
96 private: 96 private:
97 friend class base::RefCountedThreadSafe<Flag>; 97 friend class base::RefCountedThreadSafe<Flag>;
98 98
99 ~Flag(); 99 ~Flag();
100 100
101 ThreadChecker thread_checker_; 101 SequenceChecker sequence_checker_;
102 bool is_valid_; 102 bool is_valid_;
103 }; 103 };
104 104
105 WeakReference(); 105 WeakReference();
106 explicit WeakReference(const Flag* flag); 106 explicit WeakReference(const Flag* flag);
107 ~WeakReference(); 107 ~WeakReference();
108 108
109 bool is_valid() const; 109 bool is_valid() const;
110 110
111 private: 111 private:
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 // base::WeakPtr<Derived> ptr = derived.AsWeakPtr(); // Fails. 346 // base::WeakPtr<Derived> ptr = derived.AsWeakPtr(); // Fails.
347 347
348 template <typename Derived> 348 template <typename Derived>
349 WeakPtr<Derived> AsWeakPtr(Derived* t) { 349 WeakPtr<Derived> AsWeakPtr(Derived* t) {
350 return internal::SupportsWeakPtrBase::StaticAsWeakPtr<Derived>(t); 350 return internal::SupportsWeakPtrBase::StaticAsWeakPtr<Derived>(t);
351 } 351 }
352 352
353 } // namespace base 353 } // namespace base
354 354
355 #endif // BASE_MEMORY_WEAK_PTR_H_ 355 #endif // BASE_MEMORY_WEAK_PTR_H_
OLDNEW
« no previous file with comments | « base/base.gyp ('k') | base/memory/weak_ptr.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698