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


On Friday 01 of February 2019, Noel Grandin wrote:
On Fri, 1 Feb 2019 at 17:11, Luboš Luňák <l.lunak@collabora.com> wrote:
- Calc threading - the Interpret() call may spawn several threads to
compute

This case smells like this functionality should be using a different mutex
instead of the SolarMutex, then the main thread could hold some kind of
InterpretMutex, and the child threads could acquire and release the
SolarMutex as necessary.

 That wouldn't work. As I said, the main thread cannot release SolarMutex at 
that point, since any other thread could acquire it there. And as long as the 
main thread cannot release SolarMutex, no other thread can acquire it, not 
even the child ones. And as long as the child threads cannot own SolarMutex, 
they cannot use all kinds of LO functionality that require it, not just Calc 
code, but anywhere.

Perhaps the calling thread should pass both an operation and a
std::function to the clipboard thread, which the clipboard thread can post
back to the event thread once it's done - kind of a poor mans continuation.

 We have places locking SolarMutex all over the codebase. That'd be such a 
mess to do it from places that the child thread could possibly reach. Playing 
tricks with mutexes would be a nice clean approach compared to that.

"freed too late" ? sounds like an ownership issue, not a threading issue?

 It's roughly like this: There's SdrModel and some SdrObject instances, which 
refer to the SdrModel. Some SdrObject may get added to clipboard contents. 
Later, when it all is about to get deleted, first all SdrObject instances get 
deleted from whatever may refer to it, which includes resetting clipboard 
contents to something that no longer refers to it. And when all that is done, 
SdrModel is destroyed too.

 Except, Windows clipboard handling decided it would be fun to delay resetting 
clipboard contents, and so one SdrObject actually gets destroyed only later, 
when the clipboard code finally gets to it. SdrObject dtor refers to the no 
longer existing SdrModel, *boom*.

 The way I see it, this is clearly a fault of the Windows clipboard code.

I'm sure it is possible to get clever with mutexes, but I suspect you'd
just be setting yourself up for bugs that are even harder to reason about.

 I disagree. Getting clever with mutexes indeed looks very wrong 
theoretically, but in practice it'd be a hack that'd be limited to a small 
scope. Assuming it doesn't deadlock (which should be easy to spot) and 
assuming it doesn't have a performance impact, what else can go wrong in 
practice?

-- 
 Luboš Luňák
 l.lunak@collabora.com

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.