include/vcl/vclreferencebase.hxx | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
New commits: commit 0531ffaf99941ad1d1a1c79b368c086cd9e64516 Author: Noel Grandin <[email protected]> Date: Tue Mar 7 14:47:04 2017 +0200 convert VclReferenceBase::mnRefCnt to oslInterlockedCount Which means that ref-counting VCL widgets is now thread-safe. Destroying them, however, is not safe without holding the SolarMutex, which will the subject of a future patch. According to my tests running 'perf stat make check', this costs us approx 2% runtime on a non-debug Linux build using gcc. Costs are quite a bit higher when building with clang, which might need further investigation. Change-Id: I737170b74ec79e6b7c7d586ed5be89a73ee83597 Reviewed-on: https://gerrit.libreoffice.org/34948 Tested-by: Jenkins <[email protected]> Reviewed-by: Noel Grandin <[email protected]> diff --git a/include/vcl/vclreferencebase.hxx b/include/vcl/vclreferencebase.hxx index af60e2d..f5399c8 100644 --- a/include/vcl/vclreferencebase.hxx +++ b/include/vcl/vclreferencebase.hxx @@ -21,6 +21,7 @@ #include <vcl/dllapi.h> #include <tools/debug.hxx> +#include <osl/interlck.h> #include <cassert> @@ -28,21 +29,19 @@ class VclReferenceBase; class VCL_DLLPUBLIC VclReferenceBase { - mutable int mnRefCnt; + mutable oslInterlockedCount mnRefCnt; template<typename T> friend class VclPtr; public: void acquire() const { - assert(mnRefCnt>0); - mnRefCnt++; + osl_atomic_increment(&mnRefCnt); } void release() const { - assert(mnRefCnt>0); - if (!--mnRefCnt) + if (osl_atomic_decrement(&mnRefCnt) == 0) delete this; } private: _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
