[Libreoffice] SolarMutex usage...

Michael Stahl mstahl at redhat.com
Fri Oct 21 03:28:50 PDT 2011


is there any authoritative documentation on when exactly the SolarMutex 
should be locked when coming from the UI?

i know that it must be locked on UNO API method entry in the parts of 
the code that are not otherwise threadsafe, but i have no idea how the 
UI stuff / VCL works.

for example, somebody has put a DBG_TESTSOLARMUTEX() assertion in 
ImplWindowFrameProc, which can easily be triggered by just creating a 
new Writer document, entering a letter or whatever and hitting the 
'Save' icon.

now which frame in that stack should lock the SolarMutex ?

> #0  0x00007ffff7d6fdb1 in osl_assertFailedLine () from /data/lo/core/solver/unxlngx6/installation/opt/program/../basis-link/ure-link/lib/libuno_sal.so.3
> #1  0x00007ffff32cfacd in ImplDbgTestSolarMutex () at /data/lo/core/vcl/source/app/dbggui.cxx:1978
> #2  0x00007ffff4457265 in DbgFunc (nAction=15, pParam=0x0) at /data/lo/core/tools/source/debug/debug.cxx:1301
> #3  0x00007ffff34be129 in DbgTestSolarMutex () at /data/lo/core/solver/unxlngx6/inc/tools/debug.hxx:322
> #4  0x00007ffff3782fe0 in ImplWindowFrameProc (pWindow=0x134b490, nEvent=2, pEvent=0x7fffffff6fd0) at /data/lo/core/vcl/source/window/winproc.cxx:2370
> #5  0x00007fffe56641d7 in SalFrame::CallCallback (this=0x134b910, nEvent=2, pEvent=0x7fffffff6fd0) at /data/lo/core/vcl/inc/salframe.hxx:294
> #6  0x00007fffe568e55e in GtkSalFrame::signalCrossing (pEvent=0x1e3c8e0, frame=0x134b910) at /data/lo/core/vcl/unx/gtk/window/gtkframe.cxx:2866
> #7  0x000000337114ef33 in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
> #8  0x0000003363c0ea24 in g_closure_invoke () from /lib64/libgobject-2.0.so.0
> #9  0x0000003363c20d17 in ?? () from /lib64/libgobject-2.0.so.0
> #10 0x0000003363c29f13 in g_signal_emit_valist () from /lib64/libgobject-2.0.so.0
> #11 0x0000003363c2a2e2 in g_signal_emit () from /lib64/libgobject-2.0.so.0
> #12 0x0000003371284141 in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
> #13 0x00000033712842fc in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
> #14 0x000000337128858a in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
> #15 0x000000337114b1c5 in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
> #16 0x000000337114b2db in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
> #17 0x00000033712974a0 in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
> #18 0x0000003363c0ea24 in g_closure_invoke () from /lib64/libgobject-2.0.so.0
> #19 0x0000003363c20527 in ?? () from /lib64/libgobject-2.0.so.0
> #20 0x0000003363c2a141 in g_signal_emit_valist () from /lib64/libgobject-2.0.so.0
> #21 0x0000003363c2a2e2 in g_signal_emit () from /lib64/libgobject-2.0.so.0
> #22 0x000000337128cc86 in gtk_widget_show () from /usr/lib64/libgtk-x11-2.0.so.0
> #23 0x00000033710c4f13 in gtk_dialog_run () from /usr/lib64/libgtk-x11-2.0.so.0
> #24 0x00007fffdda123c2 in RunDialog::run() () from /data/lo/core/solver/unxlngx6/installation/opt/program/../program/fps_gnome.uno.so
> #25 0x00007fffdda192b8 in SalGtkFilePicker::execute() () from /data/lo/core/solver/unxlngx6/installation/opt/program/../program/fps_gnome.uno.so
> #26 0x00007ffff60f71fa in sfx2::FileDialogHelper_Impl::implDoExecute (this=0x1d986e0) at /data/lo/core/sfx2/source/dialog/filedlghelper.cxx:1306
> #27 0x00007ffff60f7f39 in sfx2::FileDialogHelper_Impl::execute (this=0x1d986e0, rpURLList=@0x7fffffff7fc0, rpSet=@0x7fffffff8268, rFilter="") at /data/lo/core/sfx2/source/dialog/filedlghelper.cxx:1481
> #28 0x00007ffff60fd16f in sfx2::FileDialogHelper::Execute (this=0x1d8c2b0, rpSet=@0x7fffffff8268, rFilter="") at /data/lo/core/sfx2/source/dialog/filedlghelper.cxx:2374
> #29 0x00007ffff62214dc in ModelData_Impl::OutputFileDialog (this=0x7fffffff8880, nStoreMode=32 ' ', aPreselectedFilterPropsHM=..., bSetStandardName=0 '\000', aSuggestedName=..., bPreselectPassword=0 '\000', aSuggestedDir=..., nDialog=0, rStandardDir=..., rBlackList=...) at /data/lo/core/sfx2/source/doc/guisaveas.cxx:997
> #30 0x00007ffff6225600 in SfxStoringHelper::GUIStoreModel (this=0x7fffffff9700, xModel=..., aSlotName=..., aArgsSequence=..., bPreselectPassword=0 '\000', aSuggestedName=..., nDocumentSignatureState=0) at /data/lo/core/sfx2/source/doc/guisaveas.cxx:1506
> #31 0x00007ffff6242d53 in SfxObjectShell::ExecFile_Impl (this=0x158c330, rReq=...) at /data/lo/core/sfx2/source/doc/objserv.cxx:631
> #32 0x00007ffff6240d73 in SfxStubSfxObjectShellExecFile_Impl (pShell=0x158c330, rReq=...) at /data/lo/core/workdir/unxlngx6/SdiTarget/sfx2/sdi/sfxslots.hxx:151
> #33 0x00007ffff60acd04 in SfxShell::CallExec (this=0x158c330, pFunc=0x7ffff6240d50 <SfxStubSfxObjectShellExecFile_Impl(SfxShell*, SfxRequest&)>, rReq=...) at /data/lo/core/sfx2/inc/sfx2/shell.hxx:202
> #34 0x00007ffff60a57fd in SfxDispatcher::Call_Impl (this=0x18e4670, rShell=..., rSlot=..., rReq=..., bRecord=1 '\001') at /data/lo/core/sfx2/source/control/dispatch.cxx:278
> #35 0x00007ffff60a8d15 in SfxDispatcher::PostMsgHandler (this=0x18e4670, pReq=0x1d8cbb0) at /data/lo/core/sfx2/source/control/dispatch.cxx:1373
> #36 0x00007ffff60a8bc3 in SfxDispatcher::LinkStubPostMsgHandler (pThis=0x18e4670, pCaller=0x1d8cbb0) at /data/lo/core/sfx2/source/control/dispatch.cxx:1343
> #37 0x00007ffff5ff87d6 in Link::Call (this=0x18e35e8, pCaller=0x1d8cbb0) at /data/lo/core/solver/unxlngx6/inc/tools/link.hxx:140
> #38 0x00007ffff62c4689 in GenLink::Call (this=0x18e35e8, pCaller=0x1d8cbb0) at /data/lo/core/sfx2/inc/sfx2/genlink.hxx:54
> #39 0x00007ffff62c457d in SfxHintPoster::Event (this=0x18e35d0, pPostedHint=0x1d8cbb0) at /data/lo/core/sfx2/source/notify/hintpost.cxx:88
> #40 0x00007ffff62c46c4 in SfxHintPoster::DoEvent_Impl (this=0x18e35d0, pPostedHint=0x1d8cbb0) at /data/lo/core/sfx2/source/notify/hintpost.cxx:78
> #41 0x00007ffff62c4553 in SfxHintPoster::LinkStubDoEvent_Impl (pThis=0x18e35d0, pCaller=0x1d8cbb0) at /data/lo/core/sfx2/source/notify/hintpost.cxx:82
> #42 0x00007ffff32d8ffc in Link::Call (this=0x14b97e0, pCaller=0x1d8cbb0) at /data/lo/core/solver/unxlngx6/inc/tools/link.hxx:140
> #43 0x00007ffff3782491 in ImplHandleUserEvent (pSVEvent=0x1d72780) at /data/lo/core/vcl/source/window/winproc.cxx:2001
> #44 0x00007ffff3783746 in ImplWindowFrameProc (pWindow=0x1273890, nEvent=22, pEvent=0x1d72780) at /data/lo/core/vcl/source/window/winproc.cxx:2573
> #45 0x00007fffe506d209 in SalFrame::CallCallback (this=0x1273d10, nEvent=22, pEvent=0x1d72780) at /data/lo/core/vcl/inc/salframe.hxx:294
> #46 0x00007fffe5083249 in SalDisplay::DispatchInternalEvent (this=0x779ce0) at /data/lo/core/vcl/unx/generic/app/saldisp.cxx:2160
> #47 0x00007fffe566387a in GtkXLib::userEventFn (data=0x6fcc80) at /data/lo/core/vcl/unx/gtk/app/gtkdata.cxx:900
> #48 0x00007fffe5663737 in call_userEventFn (data=0x6fcc80) at /data/lo/core/vcl/unx/gtk/app/gtkdata.cxx:865
> #49 0x0000003360c44add in g_main_context_dispatch () from /lib64/libglib-2.0.so.0
> #50 0x0000003360c452d8 in ?? () from /lib64/libglib-2.0.so.0
> #51 0x0000003360c454ac in g_main_context_iteration () from /lib64/libglib-2.0.so.0
> #52 0x00007fffe5663a26 in GtkXLib::Yield (this=0x6fcc80, bWait=true, bHandleAllCurrentEvents=false) at /data/lo/core/vcl/unx/gtk/app/gtkdata.cxx:953
> #53 0x00007fffe5090c5f in X11SalInstance::Yield (this=0x6fb650, bWait=true, bHandleAllCurrentEvents=false) at /data/lo/core/vcl/unx/generic/app/salinst.cxx:280
> #54 0x00007ffff32f1325 in ImplYield (i_bWait=true, i_bAllEvents=false) at /data/lo/core/vcl/source/app/svapp.cxx:459
> #55 0x00007ffff32ed8fb in Application::Yield (i_bAllEvents=false) at /data/lo/core/vcl/source/app/svapp.cxx:493
> #56 0x00007ffff32ed897 in Application::Execute () at /data/lo/core/vcl/source/app/svapp.cxx:436
> #57 0x00007ffff7ab9697 in desktop::Desktop::Main (this=0x7fffffffac40) at /data/lo/core/desktop/source/app/app.cxx:1916
> #58 0x00007ffff32f8a81 in ImplSVMain () at /data/lo/core/vcl/source/app/svmain.cxx:181
> #59 0x00007ffff32f8bc7 in SVMain () at /data/lo/core/vcl/source/app/svmain.cxx:218
> #60 0x00007ffff7aefdb6 in soffice_main () at /data/lo/core/desktop/source/app/sofficemain.cxx:69
> #61 0x0000000000400744 in sal_main () at /data/lo/core/desktop/source/app/main.c:34
> #62 0x0000000000400729 in main (argc=5, argv=0x7fffffffadf8) at /data/lo/core/desktop/source/app/main.c:33




More information about the LibreOffice mailing list