Date: prev next · Thread: first prev next last
2019 Archives by date, by thread · List index


Am 2. Februar 2019 14:49:29 MEZ schrieb Noel Grandin <noelgrandin@gmail.com>:
Assuming that there is no other way to accomplish this, how could it
work
to allow multiple child widgets to "own" the SolarMutex simultaneously?
We
just need one of those threads to trigger an update to something like a
cache, and one of the other threads is likely to crash because of a
stale
pointer.

Unless you are talking about passing some kind of permission down to
the
child threads, which says "this thread is allowed to also take the
SolarMutex, even though it is already locked", which means we'd need
another counter, and then how would that interact with
SolarMutexReleaser.

Possibly another way here is to make the parts of the child threads
that
currently need the SolarMutex, to get their own mutex, preferably a
reader/writer mutex, so that multiple of them can run in parallel.

The only real fix is to get rid of SolarMutex (SM) ;-)
While that is a long term goal, the way to do this is IMHO to keep the SM in the parent thread and 
use some messaging to transfer SM work from child to parent.

Your idea is basically what the OSX VCL backend is doing: transfer work via code block passing and 
a flag to ignore SM in the main thread while working on the code block in main. Have a look at 
https://cgit.freedesktop.org/libreoffice/core/tree/vcl/inc/osx/runinmain.hxx

In VCL we kind of do this on all platforms using different mechanisms, as all of them require to do 
GUI stuff in the main thread (unless you use threaded OpenGL), except GTK+, which also has a kind 
of SM (GDK lock), as it has to honour the platforms constraints anyway.

All the non-GUI work should use its own synchronisation primitive.

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.