Solarmutex Deadlock when Closing Calc which contains functions with XVolatileResult return values

Stephan Bergmann sbergman at redhat.com
Fri Aug 10 07:18:30 PDT 2012


On 08/10/2012 03:35 PM, anwen wrote:
> Stephan Bergmann-2 wrote
>> I think you should execute your shutdown activies on notifyTermination,
>> not queryTermination.  The latter can be veto'ed by some other listener,
>> in which case Desktop would cancel the termination and continue running
>> (and notify you with queryTermination eventually followed by
>> notifyTermination again later on).
>
> Thank you for your suggestion. Yes, queryTermination should be a place to
> set up some status changes. And real stop or shutdown a process should be
> done in notifyTermination. BTW, I saw that there is a XTerminationListener2
> where cancelTermination() is called when the master environment (e.g.,
> desktop) was canceled in it's terminate request. Is it good to use this
> interface?

As long as you only listen on notifyTermination, you don't need to 
support the derived XTerminationListener2.

>> That queryTermination is called with SolarMutex locked is a bug.  (Is
>> notifyTermination also called with SolarMutex locked?  Would need to
>> check, in framework/source/services/desktop.cxx.)  However, it might be
>> a bug not easy to fix without opening any number of pandora's boxes...
>
> Is there a bug report number regarding this issue? I would like to check its
> progress in the future. In addition, since notifyTermination is also
> protected by SolarMutex, I am wondering if you see any workaround to deal
> with such a deadlock issue related to multithread shutdown.  Thank you.

I'm not aware of any specific bug for this.  I see no workaround short 
of a proper fix.  And a proper fix would mean to (a) identify the place 
up the call stack from Desktop::terminate where SolarMutex is locked (I 
assume that TransactionGuard is not SolarMutex, but yet another locking 
for Desktop's private parts, but I may be wrong), (b) redesign that code 
path so that Desktop::terminate can call notifyTermination without 
SolarMutex, (c) see if any of the existing listeners on 
notifyTermination exploited the fact that they used to be called with 
SolarMutex locked and need to be adapted now.

Stephan


More information about the LibreOffice mailing list