summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorMichael Meeks <michael.meeks@collabora.com>2016-10-19 14:34:22 +0100
committerMichael Meeks <michael.meeks@collabora.com>2016-10-20 08:41:11 +0000
commit629bc69708a280b79f07b58adcda8593e22cf422 (patch)
tree653a82f3f75a350ee32082a4d9417743cf5bea1c /desktop
parentef7ab996d8e4479b1944f7eaf506a506647a90dd (diff)
LOK: hold the solar mutex consistently for document method calls.
(cherry picked from commit eb69d8cb5eb6192de89ca8310a53ae7a434a73d1) Change-Id: I200dff44b457a1632d99619981e237de73a2a8df Reviewed-on: https://gerrit.libreoffice.org/30070 Reviewed-by: Michael Meeks <michael.meeks@collabora.com> Tested-by: Michael Meeks <michael.meeks@collabora.com>
Diffstat (limited to 'desktop')
-rw-r--r--desktop/source/lib/init.cxx76
1 files changed, 70 insertions, 6 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx
index f87510b2bed6..f3592c8c66ac 100644
--- a/desktop/source/lib/init.cxx
+++ b/desktop/source/lib/init.cxx
@@ -912,6 +912,8 @@ void CallbackFlushHandler::removeViewStates(int viewId)
static void doc_destroy(LibreOfficeKitDocument *pThis)
{
+ SolarMutexGuard aGuard;
+
LibLODocument_Impl *pDocument = static_cast<LibLODocument_Impl*>(pThis);
delete pDocument;
}
@@ -989,10 +991,10 @@ static LibreOfficeKitDocument* lo_documentLoad(LibreOfficeKit* pThis, const char
static LibreOfficeKitDocument* lo_documentLoadWithOptions(LibreOfficeKit* pThis, const char* pURL, const char* pOptions)
{
- LibLibreOffice_Impl* pLib = static_cast<LibLibreOffice_Impl*>(pThis);
-
SolarMutexGuard aGuard;
+ LibLibreOffice_Impl* pLib = static_cast<LibLibreOffice_Impl*>(pThis);
+
OUString aURL(getAbsoluteURL(pURL));
if (aURL.isEmpty())
{
@@ -1080,6 +1082,8 @@ static void lo_registerCallback (LibreOfficeKit* pThis,
LibreOfficeKitCallback pCallback,
void* pData)
{
+ SolarMutexGuard aGuard;
+
LibLibreOffice_Impl* pLib = static_cast<LibLibreOffice_Impl*>(pThis);
pLib->mpCallback = pCallback;
@@ -1088,6 +1092,8 @@ static void lo_registerCallback (LibreOfficeKit* pThis,
static int doc_saveAs(LibreOfficeKitDocument* pThis, const char* sUrl, const char* pFormat, const char* pFilterOptions)
{
+ SolarMutexGuard aGuard;
+
LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis);
OUString sFormat = getUString(pFormat);
@@ -1213,6 +1219,8 @@ static int doc_saveAs(LibreOfficeKitDocument* pThis, const char* sUrl, const cha
static void doc_iniUnoCommands ()
{
+ SolarMutexGuard aGuard;
+
OUString sUnoCommands[] =
{
OUString(".uno:BackColor"),
@@ -1330,6 +1338,8 @@ static void doc_iniUnoCommands ()
static int doc_getDocumentType (LibreOfficeKitDocument* pThis)
{
+ SolarMutexGuard aGuard;
+
LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis);
try
@@ -1366,6 +1376,8 @@ static int doc_getDocumentType (LibreOfficeKitDocument* pThis)
static int doc_getParts (LibreOfficeKitDocument* pThis)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1378,6 +1390,8 @@ static int doc_getParts (LibreOfficeKitDocument* pThis)
static int doc_getPart (LibreOfficeKitDocument* pThis)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1390,6 +1404,8 @@ static int doc_getPart (LibreOfficeKitDocument* pThis)
static void doc_setPart(LibreOfficeKitDocument* pThis, int nPart)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1397,12 +1413,13 @@ static void doc_setPart(LibreOfficeKitDocument* pThis, int nPart)
return;
}
- SolarMutexGuard aGuard;
pDoc->setPart( nPart );
}
static char* doc_getPartPageRectangles(LibreOfficeKitDocument* pThis)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1420,6 +1437,8 @@ static char* doc_getPartPageRectangles(LibreOfficeKitDocument* pThis)
static char* doc_getPartName(LibreOfficeKitDocument* pThis, int nPart)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1437,6 +1456,8 @@ static char* doc_getPartName(LibreOfficeKitDocument* pThis, int nPart)
static char* doc_getPartHash(LibreOfficeKitDocument* pThis, int nPart)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1455,6 +1476,8 @@ static char* doc_getPartHash(LibreOfficeKitDocument* pThis, int nPart)
static void doc_setPartMode(LibreOfficeKitDocument* pThis,
int nPartMode)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1462,7 +1485,6 @@ static void doc_setPartMode(LibreOfficeKitDocument* pThis,
return;
}
- SolarMutexGuard aGuard;
int nCurrentPart = pDoc->getPart();
@@ -1493,6 +1515,8 @@ static void doc_paintTile(LibreOfficeKitDocument* pThis,
const int nTilePosX, const int nTilePosY,
const int nTileWidth, const int nTileHeight)
{
+ SolarMutexGuard aGuard;
+
SAL_INFO( "lok.tiledrendering", "paintTile: painting [" << nTileWidth << "x" << nTileHeight <<
"]@(" << nTilePosX << ", " << nTilePosY << ") to [" <<
nCanvasWidth << "x" << nCanvasHeight << "]px" );
@@ -1504,8 +1528,6 @@ static void doc_paintTile(LibreOfficeKitDocument* pThis,
return;
}
- SolarMutexGuard aGuard;
-
#if defined(UNX) && !defined(MACOSX) && !defined(ENABLE_HEADLESS)
#if defined(IOS)
@@ -1565,6 +1587,7 @@ static void doc_paintPartTile(LibreOfficeKitDocument* pThis,
const int nTileWidth, const int nTileHeight)
{
SolarMutexGuard aGuard;
+
SAL_INFO( "lok.tiledrendering", "paintPartTile: painting @ " << nPart << " ["
<< nTileWidth << "x" << nTileHeight << "]@("
<< nTilePosX << ", " << nTilePosY << ") to ["
@@ -1638,6 +1661,8 @@ static void doc_getDocumentSize(LibreOfficeKitDocument* pThis,
long* pWidth,
long* pHeight)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (pDoc)
{
@@ -1654,6 +1679,8 @@ static void doc_getDocumentSize(LibreOfficeKitDocument* pThis,
static void doc_initializeForRendering(LibreOfficeKitDocument* pThis,
const char* pArguments)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (pDoc)
{
@@ -1669,6 +1696,7 @@ static void doc_registerCallback(LibreOfficeKitDocument* pThis,
void* pData)
{
SolarMutexGuard aGuard;
+
LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis);
int nView = SfxLokHelper::getView();
@@ -1718,6 +1746,8 @@ static void doc_registerCallback(LibreOfficeKitDocument* pThis,
static void doc_postKeyEvent(LibreOfficeKitDocument* pThis, int nType, int nCharCode, int nKeyCode)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1773,6 +1803,8 @@ public:
static void doc_postUnoCommand(LibreOfficeKitDocument* pThis, const char* pCommand, const char* pArguments, bool bNotifyWhenFinished)
{
+ SolarMutexGuard aGuard;
+
SfxObjectShell* pDocSh = SfxObjectShell::Current();
OUString aCommand(pCommand, strlen(pCommand), RTL_TEXTENCODING_UTF8);
LibLODocument_Impl* pDocument = static_cast<LibLODocument_Impl*>(pThis);
@@ -1847,6 +1879,8 @@ static void doc_postUnoCommand(LibreOfficeKitDocument* pThis, const char* pComma
static void doc_postMouseEvent(LibreOfficeKitDocument* pThis, int nType, int nX, int nY, int nCount, int nButtons, int nModifier)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1878,6 +1912,8 @@ static void doc_postMouseEvent(LibreOfficeKitDocument* pThis, int nType, int nX,
static void doc_setTextSelection(LibreOfficeKitDocument* pThis, int nType, int nX, int nY)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1890,6 +1926,8 @@ static void doc_setTextSelection(LibreOfficeKitDocument* pThis, int nType, int n
static char* doc_getTextSelection(LibreOfficeKitDocument* pThis, const char* pMimeType, char** pUsedMimeType)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1916,6 +1954,8 @@ static char* doc_getTextSelection(LibreOfficeKitDocument* pThis, const char* pMi
static bool doc_paste(LibreOfficeKitDocument* pThis, const char* pMimeType, const char* pData, size_t nSize)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1949,6 +1989,8 @@ static bool doc_paste(LibreOfficeKitDocument* pThis, const char* pMimeType, cons
static void doc_setGraphicSelection(LibreOfficeKitDocument* pThis, int nType, int nX, int nY)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1961,6 +2003,8 @@ static void doc_setGraphicSelection(LibreOfficeKitDocument* pThis, int nType, in
static void doc_resetSelection(LibreOfficeKitDocument* pThis)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -1970,6 +2014,7 @@ static void doc_resetSelection(LibreOfficeKitDocument* pThis)
pDoc->resetSelection();
}
+
static char* getFonts (const char* pCommand)
{
SfxObjectShell* pDocSh = SfxObjectShell::Current();
@@ -2357,6 +2402,8 @@ static char* doc_getCommandValues(LibreOfficeKitDocument* pThis, const char* pCo
static void doc_setClientZoom(LibreOfficeKitDocument* pThis, int nTilePixelWidth, int nTilePixelHeight,
int nTileTwipWidth, int nTileTwipHeight)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -2369,6 +2416,8 @@ static void doc_setClientZoom(LibreOfficeKitDocument* pThis, int nTilePixelWidth
static void doc_setClientVisibleArea(LibreOfficeKitDocument* pThis, int nX, int nY, int nWidth, int nHeight)
{
+ SolarMutexGuard aGuard;
+
ITiledRenderable* pDoc = getTiledRenderable(pThis);
if (!pDoc)
{
@@ -2418,6 +2467,7 @@ static int doc_getViewsCount(LibreOfficeKitDocument* /*pThis*/)
static bool doc_getViewIds(LibreOfficeKitDocument* /*pThis*/, int* pArray, size_t nSize)
{
SolarMutexGuard aGuard;
+
return SfxLokHelper::getViewIds(pArray, nSize);
}
@@ -2426,6 +2476,8 @@ unsigned char* doc_renderFont(LibreOfficeKitDocument* /*pThis*/,
int* pFontWidth,
int* pFontHeight)
{
+ SolarMutexGuard aGuard;
+
OString aSearchedFontName(pFontName);
SfxObjectShell* pDocSh = SfxObjectShell::Current();
const SvxFontListItem* pFonts = static_cast<const SvxFontListItem*>(
@@ -2472,6 +2524,8 @@ unsigned char* doc_renderFont(LibreOfficeKitDocument* /*pThis*/,
static char* lo_getError (LibreOfficeKit *pThis)
{
+ SolarMutexGuard aGuard;
+
LibLibreOffice_Impl* pLib = static_cast<LibLibreOffice_Impl*>(pThis);
OString aString = OUStringToOString(pLib->maLastExceptionMsg, RTL_TEXTENCODING_UTF8);
char* pMemory = static_cast<char*>(malloc(aString.getLength() + 1));
@@ -2486,6 +2540,8 @@ static void lo_freeError(char* pFree)
static char* lo_getFilterTypes(LibreOfficeKit* pThis)
{
+ SolarMutexGuard aGuard;
+
LibLibreOffice_Impl* pImpl = static_cast<LibLibreOffice_Impl*>(pThis);
if (!xSFactory.is())
@@ -2522,6 +2578,8 @@ static char* lo_getFilterTypes(LibreOfficeKit* pThis)
static void lo_setOptionalFeatures(LibreOfficeKit* pThis, uint64_t const features)
{
+ SolarMutexGuard aGuard;
+
LibLibreOffice_Impl *const pLib = static_cast<LibLibreOffice_Impl*>(pThis);
pLib->mOptionalFeatures = features;
if (features & LOK_FEATURE_PART_IN_INVALIDATION_CALLBACK)
@@ -2531,6 +2589,8 @@ static void lo_setOptionalFeatures(LibreOfficeKit* pThis, uint64_t const feature
static void lo_setDocumentPassword(LibreOfficeKit* pThis,
const char* pURL, const char* pPassword)
{
+ SolarMutexGuard aGuard;
+
assert(pThis);
assert(pURL);
LibLibreOffice_Impl *const pLib = static_cast<LibLibreOffice_Impl*>(pThis);
@@ -2860,6 +2920,8 @@ int lok_preinit(const char* install_path, const char* user_profile_path)
static void lo_destroy(LibreOfficeKit* pThis)
{
+ SolarMutexClearableGuard aGuard;
+
bool bSuccess = false;
LibLibreOffice_Impl* pLib = static_cast<LibLibreOffice_Impl*>(pThis);
gImpl = nullptr;
@@ -2880,6 +2942,8 @@ static void lo_destroy(LibreOfficeKit* pThis)
Application::Quit();
}
+ aGuard.clear();
+
osl_joinWithThread(pLib->maThread);
osl_destroyThread(pLib->maThread);