vcl/source/app/svapp.cxx | 4 ++-- wizards/com/sun/star/wizards/common/FileAccess.py | 14 ++++++-------- wizards/com/sun/star/wizards/text/TextDocument.py | 1 + wizards/com/sun/star/wizards/web/Process.py | 2 +- 4 files changed, 10 insertions(+), 11 deletions(-)
New commits: commit 62de18ab98289fc80984299f13ad71e4a4452ea3 Author: Michael Stahl <[email protected]> Date: Tue Aug 4 23:36:13 2015 +0200 tdf#76845: wizards: fix Web wizard XSLT deadlock on Windows The web wizard runs some XSLT over the exported file. It registers a handler that is called when the output stream is closed, and this Process.streamClosedHandler() calls terminate(), which causes the deadlock, because it wants to join() the extra XSLT thread but the handler is actually called from the XSLT thread itself. Fix that by moving the terminate() to another function that runs in the main thread. It does not deadlock on Unixes because osl_joinWithThread() actually detects an attempt to join the calling thread and returns early. Change-Id: Ia176562fa28b97c7e8956c1e8975c9aa6ee23236 diff --git a/wizards/com/sun/star/wizards/web/Process.py b/wizards/com/sun/star/wizards/web/Process.py index 3de4c6c..3c1121d 100644 --- a/wizards/com/sun/star/wizards/web/Process.py +++ b/wizards/com/sun/star/wizards/web/Process.py @@ -375,6 +375,7 @@ class Process(ProcessErrors): self.tf.start() while (not self.tfCompleted): pass + self.tf.terminate() task.advance(True) @@ -400,7 +401,6 @@ class Process(ProcessErrors): print ("DEBUG !!! Stream 'error' event handler") def streamClosedHandler(self, parent): - parent.tf.terminate() parent.tfCompleted = True # I broke the export method to two methods commit c1617b8d74b5e232efeec864241ada89f874fe63 Author: Michael Stahl <[email protected]> Date: Tue Aug 4 23:03:05 2015 +0200 wizards: text.TextDocument.getPageCount called as class method only Change-Id: I9888f8ab7bccdd2902d619487279999f2ff9ab13 diff --git a/wizards/com/sun/star/wizards/text/TextDocument.py b/wizards/com/sun/star/wizards/text/TextDocument.py index b52f885..3119b16 100644 --- a/wizards/com/sun/star/wizards/text/TextDocument.py +++ b/wizards/com/sun/star/wizards/text/TextDocument.py @@ -211,6 +211,7 @@ class TextDocument(object): @return the page count of the document. ''' + @classmethod def getPageCount(self, model): xController = model.getCurrentController() xPC = xController.getViewCursor() commit 71dbc4acd0d7ec9fd42a289514435457c5bc462c Author: Michael Stahl <[email protected]> Date: Tue Aug 4 22:46:27 2015 +0200 wizards: FileAccess.getURL1 is unused Change-Id: I3afde8e7f8b0b88e8f1a5d1ad71429c2aa7d7a94 diff --git a/wizards/com/sun/star/wizards/common/FileAccess.py b/wizards/com/sun/star/wizards/common/FileAccess.py index 7ff92c3..a5e08b3 100644 --- a/wizards/com/sun/star/wizards/common/FileAccess.py +++ b/wizards/com/sun/star/wizards/common/FileAccess.py @@ -310,10 +310,6 @@ class FileAccess(object): path = parentURL + "/" + childPath return path - def getURL1(self, path): - f = "/" - return self.filenameConverter.getFileURLFromSystemPath(path, f) - ''' return the filename out of a system-dependent path ''' commit 8bf374b98d07c24a37933b8c03a53abb3a8ff5c6 Author: Michael Stahl <[email protected]> Date: Tue Aug 4 22:44:06 2015 +0200 wizards: FileAccess.getURL does not work on Windows The hard-coded "/" separator causes getFileURLFromSystemPath to fail, and it's not obvious why the URL is being converted to a system path in the first place. Change-Id: I06ebe6d92954c4f3c884ae6f0b327ea8a36c10a4 diff --git a/wizards/com/sun/star/wizards/common/FileAccess.py b/wizards/com/sun/star/wizards/common/FileAccess.py index 0e67851..7ff92c3 100644 --- a/wizards/com/sun/star/wizards/common/FileAccess.py +++ b/wizards/com/sun/star/wizards/common/FileAccess.py @@ -303,10 +303,12 @@ class FileAccess(object): i += 1 return url - def getURL(self, parentPath, childPath): - parent = self.filenameConverter.getSystemPathFromFileURL(parentPath); - path = parent + "/" + childPath - return self.filenameConverter.getFileURLFromSystemPath(parentPath, path) + def getURL(self, parentURL, childPath): + if len(childPath) > 0 and childPath[0] == "/": + path = parentURL + childPath + else: + path = parentURL + "/" + childPath + return path def getURL1(self, path): f = "/" commit 4231274abaec8e45538788bd67261044d7ef4bea Author: Michael Stahl <[email protected]> Date: Tue Aug 4 18:05:20 2015 +0200 tdf#76845: vcl: main thread does not necessarily have SolarMutex ... at least not if VCLXWindowImpl::OnProcessCallbacks drops it and calls arbitrary event handlers. So try to make nested SolarMutexReleaser work in that case (although poorly). Change-Id: I1e2a1f4d6f42f826692696f7d92d1c3d71291f39 diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx index 73c9175..c7dff0b 100644 --- a/vcl/source/app/svapp.cxx +++ b/vcl/source/app/svapp.cxx @@ -394,9 +394,9 @@ void Application::ReAcquireSolarMutex(sal_uLong const nReleased) { // 0 would mean that events/timers will be handled without locking // SolarMutex (racy) - assert(nReleased != 0); + SAL_WARN_IF(nReleased == 0, "vcl", "SolarMutexReleaser without SolarMutex"); #ifdef WNT - if (ImplGetSVData()->mbDeInit) // do not Yield in DeInitVCL + if (nReleased == 0 || ImplGetSVData()->mbDeInit) //do not Yield in DeInitVCL AcquireSolarMutex(nReleased); else ImplYield(false, false, nReleased); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
