summaryrefslogtreecommitdiffstats
path: root/base/memory
diff options
context:
space:
mode:
authorerg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-11 20:13:46 +0000
committererg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-11 20:13:46 +0000
commitf5027e47691dc2fe5ad4d3ff588b2f46533eca1c (patch)
treef53d5487845039d1ef25752111b9b37b5da99523 /base/memory
parentd89140dc2e7e84bd8ee0baebbee79e0c2793f677 (diff)
downloadchromium_src-f5027e47691dc2fe5ad4d3ff588b2f46533eca1c.zip
chromium_src-f5027e47691dc2fe5ad4d3ff588b2f46533eca1c.tar.gz
chromium_src-f5027e47691dc2fe5ad4d3ff588b2f46533eca1c.tar.bz2
Revert 81142 - Fix base::internal::WeakReference::Flag to be RefCountedThreadSafe.This allows a base::WeakPtr to be deleted on a different thread, which will modify the refcount on Flag.BUG=noneTEST=noneReview URL: http://codereview.chromium.org/6826034
TBR=willchan@chromium.org Review URL: http://codereview.chromium.org/6821053 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@81144 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/memory')
-rw-r--r--base/memory/weak_ptr.cc24
-rw-r--r--base/memory/weak_ptr.h23
2 files changed, 24 insertions, 23 deletions
diff --git a/base/memory/weak_ptr.cc b/base/memory/weak_ptr.cc
index 30c777c..fb09219 100644
--- a/base/memory/weak_ptr.cc
+++ b/base/memory/weak_ptr.cc
@@ -10,21 +10,31 @@ namespace internal {
WeakReference::Flag::Flag(Flag** handle) : handle_(handle) {
}
+WeakReference::Flag::~Flag() {
+ if (handle_)
+ *handle_ = NULL;
+}
+
+void WeakReference::Flag::AddRef() const {
+ DCHECK(CalledOnValidThread());
+ RefCounted<Flag>::AddRef();
+}
+
+void WeakReference::Flag::Release() const {
+ DCHECK(CalledOnValidThread());
+ RefCounted<Flag>::Release();
+}
+
void WeakReference::Flag::Invalidate() {
- DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(CalledOnValidThread());
handle_ = NULL;
}
bool WeakReference::Flag::IsValid() const {
- DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(CalledOnValidThread());
return handle_ != NULL;
}
-WeakReference::Flag::~Flag() {
- if (handle_)
- *handle_ = NULL;
-}
-
WeakReference::WeakReference() {
}
diff --git a/base/memory/weak_ptr.h b/base/memory/weak_ptr.h
index 0c6b4a7..edb9d93 100644
--- a/base/memory/weak_ptr.h
+++ b/base/memory/weak_ptr.h
@@ -55,7 +55,7 @@
#include "base/base_api.h"
#include "base/logging.h"
#include "base/memory/ref_counted.h"
-#include "base/threading/thread_checker.h"
+#include "base/threading/non_thread_safe.h"
namespace base {
@@ -65,23 +65,19 @@ namespace internal {
class BASE_API WeakReference {
public:
- // While Flag is bound to a specific thread, it may be deleted from another
- // via base::WeakPtr::~WeakPtr().
- class Flag : public RefCountedThreadSafe<Flag> {
+ class Flag : public RefCounted<Flag>, public base::NonThreadSafe {
public:
- explicit Flag(Flag** handle);
+ Flag(Flag** handle);
+ ~Flag();
+ void AddRef() const;
+ void Release() const;
void Invalidate();
bool IsValid() const;
- void DetachFromThread() { thread_checker_.DetachFromThread(); }
+ void DetachFromThread() { base::NonThreadSafe::DetachFromThread(); }
private:
- friend class base::RefCountedThreadSafe<Flag>;
-
- ~Flag();
-
- ThreadChecker thread_checker_;
Flag** handle_;
};
@@ -239,11 +235,6 @@ class WeakPtrFactory {
return weak_reference_owner_.HasRefs();
}
- // Indicates that this object will be used on another thread from now on.
- void DetachFromThread() {
- weak_reference_owner_.DetachFromThread();
- }
-
private:
internal::WeakReferenceOwner weak_reference_owner_;
T* ptr_;