include/o3tl/cow_wrapper.hxx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
New commits: commit 2f343f09b4adaed1fe7286dfc8ba73bdb13eeabf Author: Noel Grandin <[email protected]> AuthorDate: Wed Aug 4 15:58:34 2021 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Wed Aug 4 18:15:00 2021 +0200 tsan:datarace in o3tl::ThreadSafeRefCountingPolicy Because we a non-atomic read of the reference count. Which we shouldn't be doing anyway, or the ref-counting is broken. WARNING: ThreadSanitizer: data race (pid=121172) Read of size 4 at 0x7b100027ba38 by thread T5: /media/disk2/libo-san/include/o3tl/cow_wrapper.hxx:54:17 (libvcllo.so+0x7ee40d) o3tl::ThreadSafeRefCountingPolicy>::release() /media/disk2/libo-san/include/o3tl/cow_wrapper.hxx:208:29 (libvcllo.so+0x7ee40d) o3tl::ThreadSafeRefCountingPolicy>::~cow_wrapper() /media/disk2/libo-san/include/o3tl/cow_wrapper.hxx:260:13 (libvcllo.so+0x7ee40d) /media/disk2/libo-san/vcl/source/gdi/mapmod.cxx:97:19 (libvcllo.so+0x7ee40d) /media/disk2/libo-san/vcl/source/bitmap/bitmap.cxx:166:1 (libvcllo.so+0x92b175) /media/disk2/libo-san/vcl/source/bitmap/alpha.cxx:49:23 (libvcllo.so+0x946475) GraphicFilterImportFlags, vcl::ScopedBitmapAccess<BitmapWriteAccess, Bitmap, &(Bitmap::AcquireWriteAccess())>*, vcl::ScopedBitmapAccess<BitmapWriteAccess, AlphaMask, &(AlphaMask::AcquireAlphaWriteAccess())>*) /media/disk2/libo-san/vcl/source/filter/png/PngImageReader.cxx:383:1 (libvcllo.so+0xb67860) vcl::ScopedBitmapAccess<BitmapWriteAccess, Bitmap, &(Bitmap::AcquireWriteAccess())>*, vcl::ScopedBitmapAccess<BitmapWriteAccess, AlphaMask, &(AlphaMask::AcquireAlphaWriteAccess())>*) /media/disk2/libo-san/vcl/source/filter/png/PngImageReader.cxx:479:9 (libvcllo.so+0xb69139) namespace)::GraphicImportContext&) /media/disk2/libo-san/vcl/source/filter/graphicfilter.cxx:586:14 (libvcllo.so+0xac3a2f) /media/disk2/libo-san/vcl/source/filter/graphicfilter.cxx:574:5 (libvcllo.so+0xac3a2f) /media/disk2/libo-san/comphelper/source/misc/threadpool.cxx:314:9 (libcomphelper.so+0x1480ff) /media/disk2/libo-san/comphelper/source/misc/threadpool.cxx:83:24 (libcomphelper.so+0x1480ff) /media/disk2/libo-san/salhelper/source/thread.cxx:40:9 (libuno_salhelpergcc3.so.3+0x5350) /media/disk2/libo-san/salhelper/source/thread.cxx (libuno_salhelpergcc3.so.3+0x53b9) (libuno_salhelpergcc3.so.3+0x565e) /media/disk2/libo-san/sal/osl/unx/thread.cxx:264:9 (libuno_sal.so.3+0x68325) Previous atomic write of size 4 at 0x7b100027ba38 by main thread (mutexes: write M7453640868405680): /media/disk2/libo-san/include/o3tl/cow_wrapper.hxx:57:24 (libvcllo.so+0x7eebc9) o3tl::ThreadSafeRefCountingPolicy>::release() /media/disk2/libo-san/include/o3tl/cow_wrapper.hxx:208:29 (libvcllo.so+0x7eebc9) o3tl::ThreadSafeRefCountingPolicy>::operator=(o3tl::cow_wrapper<MapMode::ImplMapMode, o3tl::ThreadSafeRefCountingPolicy> const&) /media/disk2/libo-san/include/o3tl/cow_wrapper.hxx:269:13 (libvcllo.so+0x7eebc9) /media/disk2/libo-san/vcl/source/gdi/mapmod.cxx:124:45 (libvcllo.so+0x7eebc9) Change-Id: I6334b748b91bf414168c05d90fc5bd6d7dfe3dda Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120005 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/include/o3tl/cow_wrapper.hxx b/include/o3tl/cow_wrapper.hxx index 8cc3651030fd..c05d28699259 100644 --- a/include/o3tl/cow_wrapper.hxx +++ b/include/o3tl/cow_wrapper.hxx @@ -51,10 +51,7 @@ namespace o3tl static void incrementCount( ref_count_t& rCount ) { osl_atomic_increment(&rCount); } static bool decrementCount( ref_count_t& rCount ) { - if( rCount == 1 ) // caller is already the only/last reference - return false; - else - return osl_atomic_decrement(&rCount) != 0; + return osl_atomic_decrement(&rCount) != 0; } };
