diff options
author | hans@chromium.org <hans@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-11 00:37:42 +0000 |
---|---|---|
committer | hans@chromium.org <hans@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-11 00:37:42 +0000 |
commit | a827a56218099cbb06ae49c89c6dea6c32a2644f (patch) | |
tree | 7241331755f5f9bcc27c2a7353251fd99bf8fff5 /base/memory | |
parent | ba721606c1d309ff0e98068d717aaf1f994455d5 (diff) | |
download | chromium_src-a827a56218099cbb06ae49c89c6dea6c32a2644f.zip chromium_src-a827a56218099cbb06ae49c89c6dea6c32a2644f.tar.gz chromium_src-a827a56218099cbb06ae49c89c6dea6c32a2644f.tar.bz2 |
dllexport base::internal::WeakReference::Flag
Flag's methods can end up getting called across a dll boundary due to inlining.
For example, Flag's destructor ends up being called from gpu.dll when the
following call chain gets inlined:
gpu::gles2::ContextGroup::HaveContexts() ->
std::vector<WeakPtr<gles2::GLES2Decoder>>::remove_if() ->
WeakPtr copy assignment ->
WeakReference copy assignment ->
scoped_refptr<Flag> copy assignment ->
RefCountedThreadSafe<Flag>::Release -> ~Flag.
(Note that dllimport/export isn't inherited by nested classes,
but the visibility attribute that we use on other platforms is.)
BUG=82385
TEST=build gpu.dll with Clang in a shared_library Release build
R=mark@chromium.org
Review URL: https://codereview.chromium.org/321983002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@276220 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/memory')
-rw-r--r-- | base/memory/weak_ptr.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/base/memory/weak_ptr.h b/base/memory/weak_ptr.h index 1675889..f6001e2 100644 --- a/base/memory/weak_ptr.h +++ b/base/memory/weak_ptr.h @@ -83,7 +83,7 @@ class BASE_EXPORT WeakReference { public: // Although Flag is bound to a specific thread, it may be deleted from another // via base::WeakPtr::~WeakPtr(). - class Flag : public RefCountedThreadSafe<Flag> { + class BASE_EXPORT Flag : public RefCountedThreadSafe<Flag> { public: Flag(); |