summaryrefslogtreecommitdiff
path: root/include/cppuhelper
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2016-06-17 13:35:08 +0200
committerMichael Stahl <mstahl@redhat.com>2016-06-17 15:10:37 +0200
commitdebe788bcf3ec258b6b95df3db1f7bfeba881be1 (patch)
tree97360add635846cab9bf18971d72daab65a530e3 /include/cppuhelper
parent6b3eb4788f63602c0a446ad8f56539d3b65bb302 (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
Diffstat (limited to 'include/cppuhelper')
-rw-r--r--include/cppuhelper/weakref.hxx20
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
*/