From d048d2bb9464d5bb86b37e7da436be6ffe13ab29 Mon Sep 17 00:00:00 2001 From: Jan Holesovsky Date: Tue, 3 Nov 2015 16:52:46 +0100 Subject: [PATCH 271/398] lok: Fix crash due to non-initialized callback. Yay for unit tests! :-) Change-Id: I06b3f929b53d5c03f5722acfdaf0eaf841325e34 (cherry picked from commit b846b03c709130564527da8d264660a131361221) --- desktop/qa/desktop_lib/test_desktop_lib.cxx | 15 ++++++++++++--- desktop/source/lib/init.cxx | 6 ++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/desktop/qa/desktop_lib/test_desktop_lib.cxx b/desktop/qa/desktop_lib/test_desktop_lib.cxx index 15fe123fdc37..4c23ecb50b73 100644 --- a/desktop/qa/desktop_lib/test_desktop_lib.cxx +++ b/desktop/qa/desktop_lib/test_desktop_lib.cxx @@ -394,16 +394,25 @@ void DesktopLOKTest::testRowColumnHeaders() void DesktopLOKTest::testCommandResult() { LibLODocument_Impl* pDocument = loadDoc("blank_text.odt"); - pDocument->pClass->registerCallback(pDocument, &DesktopLOKTest::callback, this); // the postUnoCommand() is supposed to be async, let's test it safely // [no idea if it is async in reality - most probably we are operating // under some solar mutex or something anyway ;-) - but...] - m_aCommandResultCondition.reset(); + TimeValue aTimeValue = { 2 , 0 }; // 2 seconds max + // nothing is triggered when we have no callback yet, we just time out on + // the condition var. + m_aCommandResultCondition.reset(); pDocument->pClass->postUnoCommand(pDocument, ".uno:Bold", 0, true); + m_aCommandResultCondition.wait(aTimeValue); - TimeValue aTimeValue = { 2 , 0 }; // 2 seconds max + CPPUNIT_ASSERT(m_aCommandResult.isEmpty()); + + // but we get some real values when the callback is set up + pDocument->pClass->registerCallback(pDocument, &DesktopLOKTest::callback, this); + + m_aCommandResultCondition.reset(); + pDocument->pClass->postUnoCommand(pDocument, ".uno:Bold", 0, true); m_aCommandResultCondition.wait(aTimeValue); boost::property_tree::ptree aTree; diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index b9aeedd5e21c..bf244cd7aefa 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -268,8 +268,10 @@ static void doc_setView(LibreOfficeKitDocument* pThis, int nId); static int doc_getView(LibreOfficeKitDocument* pThis); static int doc_getViews(LibreOfficeKitDocument* pThis); -LibLODocument_Impl::LibLODocument_Impl(const uno::Reference &xComponent) : - mxComponent( xComponent ) +LibLODocument_Impl::LibLODocument_Impl(const uno::Reference &xComponent) + : mxComponent(xComponent) + , mpCallback(nullptr) + , mpCallbackData(nullptr) { if (!(m_pDocumentClass = gDocumentClass.lock())) { -- 2.12.0