Hello Damjan, All,
I get reproducible crashes on trunk, built under Linux.
More below.
On Sun, Jun 08, 2025 at 12:25:03PM +0200, Damjan Jovanovic wrote:
[...]
> Reverting only the changes to lngreg.cxx also completely fixed the test
> crashes, which tells us that the regression is in this simple
> harmless-looking part of the change:
> git show 1890034f73947872dc88f59af6226fed5174e2b5
> main/linguistic/source/lngsvcmgr.cxx
> (and of course the related changes to main/linguistic/source/lngreg.cxx).
These crashes seem to be related:
(gdb) bt
#0 osl::Mutex::acquire (this=0x0)
at /openoffice/main/solver/450/unxlngx6.pro/inc/osl/mutex.hxx:62
#1 0x00007ffff7182899 in cppu::OInterfaceContainerHelper::addInterface
(this=this@entry=0x7fffb16186a0, rListener=...)
at /openoffice/main/cppuhelper/source/interfacecontainer.cxx:221
#2 0x00007ffff42a5562 in LngSvcMgrListenerHelper::AddLngSvcEvtBroadcaster
(this=0x7fffb1618648, rxBroadcaster=...)
at /openoffice/main/linguistic/source/lngsvcmgr.cxx:550
#3 0x00007ffff42a7b30 in LngSvcMgr::AddLngSvcEvtBroadcaster
(this=<optimized out>, rxBroadcaster=...)
at /openoffice/main/linguistic/source/lngsvcmgr.cxx:1927
#4 0x00007ffff42b154f in SpellCheckerDispatcher::isValid_Impl
(this=this@entry=0x7fffb13fc550, rWord=..., nLanguage=<optimized out>,
rProperties=..., bCheckDics=bCheckDics@entry=1 '\001')
at /openoffice/main/linguistic/source/spelldsp.cxx:428
#5 0x00007ffff42b18ce in SpellCheckerDispatcher::isValid
(this=0x7fffb13fc550, rWord=..., rLocale=..., rProperties=...)
at /openoffice/main/linguistic/source/spelldsp.cxx:263
#6 0x00007ffff42b07ff in SpellCheckerDispatcher::isValid
(this=0x7fffb13fc550, rWord=..., nLanguage=<optimized out>, rProperties=...)
The ``faulty'' mutex to be acquired is
cppu::OInterfaceContainerHelper::rMutex, that is a reference to
address zero (!!).
(gdb) frame 1
#1 0x00007ffff7182899 in cppu::OInterfaceContainerHelper::addInterface (
this=this@entry=0x7fffd159b0b0, rListener=...)
at /openoffice/main/cppuhelper/source/interfacecontainer.cxx:221
221 MutexGuard aGuard( rMutex );
(gdb) p rMutex
$62 = (osl::Mutex &) <error reading variable: Cannot access memory at address
0x0>
This should never happen, because the reference is initialized in the
cppu::OInterfaceContainerHelper constructor.
But breaking on such constructor is not helpful, because it is called
hundreds (?) of times, just while AOO starts.
Let's look at frame 2, then:
(gdb) frame 2
#2 0x00007ffff42a5562 in LngSvcMgrListenerHelper::AddLngSvcEvtBroadcaster (
this=0x7fffd1dfc058, rxBroadcaster=...)
at /openoffice/main/linguistic/source/lngsvcmgr.cxx:550
550 aLngSvcEvtBroadcasters.addInterface( rxBroadcaster );
So the "faulty" object is in fact variable
LngSvcMgrListenerHelper::aLngSvcEvtBroadcasters.
It is an attribute, initialized in the LngSvcMgrListenerHelper constructor.
Fun fact: LngSvcMgrListenerHelper::LngSvcMgrListenerHelper is never
executed! If I add a breakpoint on it, the program will just reach the
crashing point.
The ``never initialized'' LngSvcMgrListenerHelper istance belongs to a
LngSvcMgr instance, that is: SpellCheckerDispatcher::rMgr.
I could not understand if that LngSvcMgr instance is instantiated
correctly, because there are lots of them.
I hope this helps for debugging this issue. I can share with you
privately the documents, if you think they could be useful.
Best regards,
--
Arrigo
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]