diff options
author | Michael Stahl <mstahl@redhat.com> | 2016-06-17 13:35:08 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2016-06-17 15:18:01 +0000 |
commit | 8020863d409eb441cf48c55450a7cd48fed05108 (patch) | |
tree | 73e8ec975b8c8ec3bc5b04c873e5f44ff9115e8c /include | |
parent | 08664ec1f7553acc88719a2b8779cca2eab75f76 (diff) |
cppuhelper: WeakReference isn't thread-safe
... but its documentation claims that it is, which is partially
misleading, so fix both the documentation and the data race in
WeakReferenceHelper::clear().
This actually crashed in clear() in the multi-threaded ZipPackage code
on exporting the bugdoc from tdf#94212, presumably because clear()
races against OWeakRefListener::dispose().
Change-Id: I85665c11b8157e90d15e8263758e24e66efeb86c
(cherry picked from commit debe788bcf3ec258b6b95df3db1f7bfeba881be1)
Reviewed-on: https://gerrit.libreoffice.org/26424
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Tested-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/cppuhelper/weakref.hxx | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/include/cppuhelper/weakref.hxx b/include/cppuhelper/weakref.hxx index 783649418594..9cd422b8aab6 100644 --- a/include/cppuhelper/weakref.hxx +++ b/include/cppuhelper/weakref.hxx @@ -39,8 +39,14 @@ namespace uno class OWeakRefListener; -/** The WeakReferenceHelper holds a weak reference to an object. This object must implement - the css::uno::XWeak interface. The implementation is thread safe. +/** The WeakReferenceHelper holds a weak reference to an object. + + This object must implement the css::uno::XWeak interface. + + The WeakReferenceHelper itself is *not* thread safe, just as + Reference itself isn't, but the implementation of the listeners etc. + behind it *is* thread-safe, so multiple threads can have their own + WeakReferences to the same XWeak object. */ class CPPUHELPER_DLLPUBLIC WeakReferenceHelper { @@ -116,8 +122,14 @@ protected: /// @endcond }; -/** The WeakReference<> holds a weak reference to an object. This object must implement - the css::uno::XWeak interface. The implementation is thread safe. +/** The WeakReference<> holds a weak reference to an object. + + This object must implement the css::uno::XWeak interface. + + The WeakReference itself is *not* thread safe, just as + Reference itself isn't, but the implementation of the listeners etc. + behind it *is* thread-safe, so multiple threads can have their own + WeakReferences to the same XWeak object. @tparam interface_type type of interface */ |