summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2017-06-28 16:12:05 +0200
committerStephan Bergmann <sbergman@redhat.com>2017-06-28 16:12:05 +0200
commit4cfcc3de24d13efb2690d133f963df58e1479cfc (patch)
tree7c1147e9d6157bfdb7fe5fd2aa4e795a951ea3a6 /vcl
parentea7df4a802dfe363a6d7d088d9937a22c59dede3 (diff)
Call ~Idle with SolarMutex locked
...may be the cause for rather frequent UITest failures on Jenkins bot lo_tb_master_linux_dbg, like <https://ci.libreoffice.org/job/lo_tb_master_linux_dbg/14067/console> during UITest_calc_demo: > Thread 1 (Thread 0x2b2622036700 (LWP 12315)): > #0 0x00002b2604d495eb in Task::~Task() (this=0x2b2622034f90, __in_chrg=<optimized out>) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/vcl/source/app/scheduler.cxx:362 > #1 0x00002b2604d7cddc in Timer::~Timer() (this=0x2b2622034f90, __in_chrg=<optimized out>) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/vcl/source/app/timer.cxx:73 > #2 0x00002b26047eb25a in Idle::~Idle() (this=0x2b2622034f90, __in_chrg=<optimized out>) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/include/vcl/idle.hxx:30 > #3 0x00002b2604e900fd in UIObjectUnoObj::executeAction(rtl::OUString const&, com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue> const&) (this=0x304ce50, rAction="TYPE", rPropValues=uno::Sequence of length 1 = {...}) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/vcl/source/uitest/uno/uiobject_uno.cxx:118 > aIdle = {<Timer> = {<Task> = {_vptr.Task = 0x2b2605888c10 <vtable for Task+16>, mpSchedulerData = 0x0, mpDebugName = 0x2b2605264160 "UI Test Idle Handler", mePriority = HIGH, mbActive = false}, maInvokeHandler = {function_ = 0x2b2604e8fa66 <(anonymous namespace)::ExecuteWrapper::LinkStubExecuteActionHdl(void*, Timer*)>, instance_ = 0x2de91c0}, mnTimeout = 1, mbAuto = false}, <No data fields>} > func = {<std::_Maybe_unary_or_binary_function<void>> = {<No data fields>}, <std::_Function_base> = {static _M_max_size = 16, static _M_max_align = 8, _M_functor = {_M_unused = {_M_object = 0x27aafc0, _M_const_object = 0x27aafc0, _M_function_pointer = 0x27aafc0, _M_member_pointer = (void (std::_Undefined_class::*)(std::_Undefined_class * const)) 0x27aafc0, this adjustment 38138176}, _M_pod_data = "\300\257z\002\000\000\000\000@\361E\002\000\000\000"}, _M_manager = 0x2b2604e90ac7 <std::_Function_base::_Base_manager<UIObjectUnoObj::executeAction(const rtl::OUString&, const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&)::__lambda0>::_M_manager(std::_Any_data &, const std::_Any_data &, std::_Manager_operation)>}, _M_invoker = 0x2b2604e90aa5 <std::_Function_handler<void(), UIObjectUnoObj::executeAction(const rtl::OUString&, const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>&)::__lambda0>::_M_invoke(const std::_Any_data &)>} > lk = {_M_device = 0x304cef0, _M_owns = true} > pWrapper = 0x2de91c0 > #4 0x00002b261d76951d in gcc3::callVirtualMethod(void*, unsigned int, void*, _typelib_TypeDescriptionReference*, bool, unsigned long*, unsigned int, unsigned long*, double*) (pThis=0x304cea0, nVtableIndex=4, pRegisterReturn=0x0, pReturnTypeRef=0x16b42c0, bSimpleReturn=true, pStack=0x2b2622035160, nStack=0, pGPR=0x2b26220352d0, pFPR=0x2b2622035300) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/bridges/source/cpp_uno/gcc3_linux_x86-64/callvirtualmethod.cxx:133 > data = {pMethod = 47442291130818, pStack = 0x2b2622035160, nStack = 0, pGPR = 0x2b26220352d0, pFPR = 0x2b2622035300, rax = 47442779394304, rdx = 47442779394256, xmm0 = 2.3439542265158875e-310, xmm1 = 2.343984744210869e-310} > pMethod = 47442301612736 > #5 0x00002b261d76815c in cpp_call(bridges::cpp_uno::shared::UnoInterfaceProxy*, bridges::cpp_uno::shared::VtableSlot, typelib_TypeDescriptionReference*, sal_Int32, typelib_MethodParameter*, void*, void**, uno_Any**) (pThis=0x27ade30, aVtableSlot=..., pReturnTypeRef=0x16b42c0, nParams=2, pParams=0x27b0850, pUnoReturn=0x0, pUnoArgs=0x2eecbc0, ppUnoExc=0x2b2622035488) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:237 > pStack = 0x2b2622035160 > pFPR = {2.3439847442227266e-310, 2.3439819402763736e-310, 8.4879831638610893e-314, 2.3439847442246535e-310, 2.0565652466724057e-316, -2.1644405065794623e-51, 2.3439847442250981e-310, 0} > __PRETTY_FUNCTION__ = "void cpp_call(bridges::cpp_uno::shared::UnoInterfaceProxy*, bridges::cpp_uno::shared::VtableSlot, typelib_TypeDescriptionReference*, sal_Int32, typelib_MethodParameter*, void*, void**, uno_Any**)" > pCppArgs = 0x2b2622035120 > pStackStart = 0x2b2622035160 > pGPR = {50646688, 41629936, 47442779394304, 47442703110834, 0, 41625344} > nTempIndices = 1 > nFPR = 0 > pAdjustedThisPtr = 0x304cea0 > ppTempParamTypeDescr = 0x2b2622035140 > nGPR = 3 > pReturnTypeDescr = 0x16b42c0 > pCppReturn = 0x0 > bSimpleReturn = true > pTempIndices = 0x2b2622035130 > #6 0x00002b261d768bdb in bridges::cpp_uno::shared::unoInterfaceProxyDispatch(_uno_Interface*, _typelib_TypeDescription const*, void*, void**, _uno_Any**) (pUnoI=0x27ade30, pMemberDescr=0x27b2700, pReturn=0x0, pArgs=0x2eecbc0, ppException=0x2b2622035488) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/bridges/source/cpp_uno/gcc3_linux_x86-64/uno2cpp.cxx:425 > nMemberPos = 4 > aVtableSlot = {offset = 0, index = 4} > pThis = 0x27ade30 > pTypeDescr = 0x27aeab0 > __PRETTY_FUNCTION__ = "void bridges::cpp_uno::shared::unoInterfaceProxyDispatch(uno_Interface*, const typelib_TypeDescription*, void*, void**, uno_Any**)" > #7 0x00002b261ea0ff28 in binaryurp::IncomingRequest::execute_throw(binaryurp::BinaryAny*, std::__debug::vector<binaryurp::BinaryAny, std::allocator<binaryurp::BinaryAny> >*) const (this=0x17eaec0, returnValue=0x2b26220358a0, outArguments=0x2b2622035920) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/binaryurp/source/incomingrequest.cxx:242 > exc = <error reading variable: Cannot access memory at address 0x7261686320747376> > pexc = 0x2b26220354b0 > retType = {_pTypeDescr = 0x16b42c0} > nSize = 0 > retBuf = std::__debug::vector of length 0, capacity 0 > outBufs = empty std::__debug::list > args = std::__debug::vector of length 2, capacity 2 = {0x27b38f0, 0x27b3908} > __PRETTY_FUNCTION__ = "bool binaryurp::IncomingRequest::execute_throw(binaryurp::BinaryAny*, std::__debug::vector<binaryurp::BinaryAny>*) const" > isExc = false > #8 0x00002b261ea0ed16 in binaryurp::IncomingRequest::execute() const (this=0x17eaec0) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/binaryurp/source/incomingrequest.cxx:79 > resetCc = true > oldCc = {m_pUnoI = 0x0} > ret = {data_ = _uno_Any(void)} > outArgs = std::__debug::vector of length 0, capacity 0 > isExc = false > #9 0x00002b261ea2f7a4 in binaryurp::(anonymous namespace)::request(void*) (pThreadSpecificData=0x17eaec0) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/binaryurp/source/reader.cxx:85 > __PRETTY_FUNCTION__ = "void binaryurp::{anonymous}::request(void*)" > #10 0x00002b25fd2edf5f in cppu_threadpool::JobQueue::enter(long, bool) (this=0x2d036e0, nDisposeId=41587312, bReturnWhenNoJob=true) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/cppu/source/threadpool/jobqueue.cxx:107 > guard = {pT = 0x2d036e0} > job = {pThreadSpecificData = 0x17eaec0, doRequest = 0x2b261ea2f73b <binaryurp::(anonymous namespace)::request(void*)>} > pReturn = 0x0 > #11 0x00002b25fd2f2bfd in cppu_threadpool::ORequestThread::run() (this=0x27a9270) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/cppu/source/threadpool/thread.cxx:172 > #12 0x00002b25fd2f312b in osl::threadFunc(void*) (param=0x27a9280) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/include/osl/thread.hxx:185 > pObj = 0x27a9280 > #13 0x00002b25f9a194a5 in osl_thread_start_Impl(void*) (pData=0x27a9540) at /home/tdf/lode/jenkins/workspace/lo_tb_master_linux_dbg/sal/osl/unx/thread.cxx:237 > terminate = false > pImpl = 0x27a9540 > __PRETTY_FUNCTION__ = "void* osl_thread_start_Impl(void*)" > #14 0x00002b25fa404dc5 in start_thread () at /lib64/libpthread.so.0 > #15 0x00002b25fa131ced in clone () at /lib64/libc.so.6 Change-Id: Iad8402ce9fd3315b7446d6274a4fe18f8e8012fd
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/uitest/uno/uiobject_uno.cxx14
1 files changed, 9 insertions, 5 deletions
diff --git a/vcl/source/uitest/uno/uiobject_uno.cxx b/vcl/source/uitest/uno/uiobject_uno.cxx
index c69988154653..90205a5dff8e 100644
--- a/vcl/source/uitest/uno/uiobject_uno.cxx
+++ b/vcl/source/uitest/uno/uiobject_uno.cxx
@@ -10,6 +10,7 @@
#include <memory>
#include "uiobject_uno.hxx"
#include <utility>
+#include <o3tl/make_unique.hxx>
#include <vcl/svapp.hxx>
#include <vcl/idle.hxx>
@@ -115,9 +116,9 @@ void SAL_CALL UIObjectUnoObj::executeAction(const OUString& rAction, const css::
mAction = rAction;
mPropValues = rPropValues;
mReady = false;
- Idle aIdle;
- aIdle.SetDebugName("UI Test Idle Handler");
- aIdle.SetPriority(TaskPriority::HIGH);
+ auto aIdle = o3tl::make_unique<Idle>();
+ aIdle->SetDebugName("UI Test Idle Handler");
+ aIdle->SetPriority(TaskPriority::HIGH);
std::function<void()> func = [this](){
@@ -136,14 +137,17 @@ void SAL_CALL UIObjectUnoObj::executeAction(const OUString& rAction, const css::
ExecuteWrapper* pWrapper = new ExecuteWrapper(func, LINK(this, UIObjectUnoObj, NotifyHdl));
std::unique_lock<std::mutex>(pWrapper->getMutex());
- aIdle.SetInvokeHandler(LINK(pWrapper, ExecuteWrapper, ExecuteActionHdl));
+ aIdle->SetInvokeHandler(LINK(pWrapper, ExecuteWrapper, ExecuteActionHdl));
{
SolarMutexGuard aGuard;
- aIdle.Start();
+ aIdle->Start();
}
cv.wait(lk, [this]{return mReady;});
pWrapper->setSignal();
+
+ SolarMutexGuard aGuard;
+ aIdle.reset();
}
css::uno::Sequence<css::beans::PropertyValue> UIObjectUnoObj::getState()