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


Hi Riccardo,

On Fri, 2012-09-28 at 20:26 +0200, Riccardo Magliocchetti wrote:
Here you go, you'll find the valgrind output sans all the zlib / python
related errors. Thanks a lot!

update to git 7a3a8a254363801bf6893b23d67f86a7461f8f3b and more or less 
same valgrind errors. See attached trace.

        It looks really interesting :-) it's hard to tell (from valgrind) where
the threads were pre-empted [ actually logging that might be quite a
nice feature to add to for valgrind ;-], but there is already the
SolarMutex guard to try to stop this from happening.

        I append the odd trace with some thoughts.

        It is -possible- that we never get around to taking the solar mutex in
the first instance in 'main' - such that by the time we come to release
and re-take it in vcl/headless/svpinst.cxx:

void SvpSalInstance::Yield( bool bWait, bool bHandleAllCurrentEvents )

        the count is zero - could you add some fprintf debugging to check that
- just dump nAcquireCount. If that is the case this patch might help:

--- a/vcl/headless/svpinst.cxx
+++ b/vcl/headless/svpinst.cxx
@@ -171,6 +171,9 @@ bool SvpSalInstance::CheckTimeout( bool
bExecuteTimers )
                 // timed out, update timeout
                 m_aTimeout = aTimeOfDay;
                 m_aTimeout += m_nTimeoutMS;
+
+                osl::SolarGuard aGuard( mpSalYieldMutex );
+
                 // notify
                 ImplSVData* pSVData = ImplGetSVData();
                 if( pSVData->mpSalTimer )

        If it does - it's not the real fix ;-) but it'd be good to know.

        Thanks for posting the trace - rather interesting :-)

        All the best,

                Michael.

==28574== Thread 1:
==28574== Invalid read of size 8
==28574==    at 0x739C702: SfxStateCache::SetState_Impl(unsigned short, SfxPoolItem const*, 
unsigned char) (statcach.cxx:454)
==28574==    by 0x738042E: SfxBindings::UpdateControllers_Impl(SfxInterface const*, 
SfxFoundCache_Impl const*, SfxPoolItem const*, unsigned short) (bindings.cxx:1500)
==28574==    by 0x7383C5B: SfxBindings::Update_Impl(SfxStateCache*) (bindings.cxx:437)
==28574==    by 0x7383FD7: SfxBindings::NextJob_Impl(Timer*) (bindings.cxx:1646)
==28574==    by 0x92BF4AD: Timer::ImplTimerCallbackProc() (timer.cxx:142)

        The YieldMutex -should- be held at this point excluding this other thread (?).

==28574==    by 0x95D152D: SvpSalInstance::CheckTimeout(bool) (saltimer.hxx:57)
==28574==    by 0x95D17D7: SvpSalInstance::Yield(bool, bool) (svpinst.cxx:288)
==28574==    by 0x92B4530: Application::Yield(bool) (svapp.cxx:434)
==28574==    by 0x92B45E6: Application::Execute() (svapp.cxx:413)
==28574==    by 0x50AED58: desktop::Desktop::Main() (app.cxx:1711)
==28574==    by 0x92BDFB8: ImplSVMain() (svmain.cxx:173)
==28574==    by 0x92BE8E4: SVMain() (svmain.cxx:210)
==28574==    by 0x50E1CF4: soffice_main (sofficemain.cxx:83)
==28574==    by 0x40069A: main (main.c:25)

==28574==  Address 0x1466bdc8 is 56 bytes inside a block of size 72 free'd
==28574==    at 0x4C27FF2: operator delete(void*) (vg_replace_malloc.c:387)
==28574==    by 0x737F479: SfxBindings::DeleteControllers_Impl() (bindings.cxx:325)
==28574==    by 0x7380572: SfxBindings::~SfxBindings() (bindings.cxx:264)
==28574==    by 0x7380718: SfxBindings::~SfxBindings() (bindings.cxx:275)
==28574==    by 0x758B91E: SfxFrame::DoClose_Impl() (frame.cxx:178)
==28574==    by 0x75AAFC1: SfxBaseController::dispose() (sfxbasecontroller.cxx:1041)

sfx2/source/view/sfxbasecontroller.cxx:

        This method has a live:

                    SolarMutexGuard aGuard;

==28574==    by 0x16B8E785: 
framework::Frame::setComponent(com::sun::star::uno::Reference<com::sun::star::awt::XWindow> const&, 
com::sun::star::uno::Reference<com::sun::star::frame::XController> const&) (frame.cxx:1380)
==28574==    by 0x16B8E1CF: framework::Frame::close(unsigned char) (frame.cxx:1633)
==28574==    by 0x758BE87: SfxFrame::DoClose() (frame.cxx:140)
==28574==    by 0x797F51C: SfxBroadcaster::Broadcast(SfxHint const&) (brdcst.cxx:49)
==28574==    by 0x7511211: SfxModelListener_Impl::notifyClosing(com::sun::star::lang::EventObject 
const&) (objxtor.cxx:173)
==28574==    by 0x7534972: SfxBaseModel::close(unsigned char) (sfxbasemodel.cxx:1491)
==28574==    by 0x1E776909: SwXTextDocument::close(unsigned char) (unotxdoc.cxx:578)
==28574==    by 0x7537FB0: SfxBaseModel::dispose() (sfxbasemodel.cxx:788)
==28574==    by 0x1211D6E7: gcc3::callVirtualMethod(void*, unsigned int, void*, 
_typelib_TypeDescriptionReference*, bool, unsigned long*, unsigned int, unsigned long*, unsigned 
int, double*, unsigned int) (callvirtualmethod.cxx:128)
==28574==    by 0x12120FEE: cpp_call(bridges::cpp_uno::shared::UnoInterfaceProxy*, 
bridges::cpp_uno::shared::VtableSlot, _typelib_TypeDescriptionReference*, int, 
_typelib_MethodParameter*, void*, void**, _uno_Any**) (uno2cpp.cxx:246)
==28574==    by 0x12121ACD: bridges::cpp_uno::shared::unoInterfaceProxyDispatch(_uno_Interface*, 
_typelib_TypeDescription const*, void*, void**, _uno_Any**) (uno2cpp.cxx:440)
==28574==    by 0x15D5CE5E: binaryurp::IncomingRequest::execute_throw(binaryurp::BinaryAny*, 
std::vector<binaryurp::BinaryAny, std::allocator<binaryurp::BinaryAny> >*) const 
(incomingrequest.cxx:251)
==28574==    by 0x15D5D8AB: binaryurp::IncomingRequest::execute() const (incomingrequest.cxx:80)
==28574==    by 0x15D61B4C: request (reader.cxx:89)
==28574==    by 0x663A506: cppu_threadpool::JobQueue::enter(long, unsigned char) (jobqueue.cxx:115)
==28574==    by 0x663B00D: cppu_threadpool::ORequestThread::run() (thread.cxx:179)
==28574==    by 0x663B4E9: threadFunc (thread.hxx:196)
==28574==    by 0x4E467AE: osl_thread_start_Impl (thread.c:261)
==28574==    by 0x5E53EFB: start_thread (pthread_create.c:304)
==28574==    by 0x5B8E89C: clone (clone.S:112)

-- 
michael.meeks@suse.com  <><, Pseudo Engineer, itinerant idiot


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.