path: root/vcl/inc/win
diff options
authorMichael Stahl <>2017-04-13 17:28:46 +0200
committerMarkus Mohrhard <>2017-04-15 23:07:46 +0200
commit1ba5bae490f7e14e475e0b80f03e5f444cdce908 (patch)
treef6472ef0551c254835a3c35eadde2720f0bee69a /vcl/inc/win
parentd180418fedd4592044c33558426e9ea9be6f1ebd (diff)
tdf#106933 vcl: delete D2DWriteTextOutRenderer before exit()
As it happens this DirectWrite stuff is using some thread pool internally, and that must be shutdown before exit(), as Win32 will terminate all other threads at that point, and then the thread pool wants to talk to threads that don't exist any more. So convert this from a global variable that is deleted from DllMain() to a member of SalData, so it is deleted from DeInitVCL(). Change-Id: I51408a07c78758cf0c193ab66b9214d0c9dbd9e3 (cherry picked from commit df556aa47da22f96b3fcd356c12419d3035cba3c) Reviewed-on: Tested-by: Jenkins <> Reviewed-by: Markus Mohrhard <>
Diffstat (limited to 'vcl/inc/win')
1 files changed, 4 insertions, 0 deletions
diff --git a/vcl/inc/win/saldata.hxx b/vcl/inc/win/saldata.hxx
index fc82e13b617a..cf11a04ddace 100644
--- a/vcl/inc/win/saldata.hxx
+++ b/vcl/inc/win/saldata.hxx
@@ -39,6 +39,7 @@ class WinSalPrinter;
namespace vcl { class Font; }
struct HDCCache;
struct TempFontItem;
+class TextOutRenderer;
#define MAX_STOCKPEN 4
@@ -118,6 +119,9 @@ public:
std::set< HMENU > mhMenuSet; // keeps track of menu handles created by VCL, used by IsKnownMenuHandle()
std::map< UINT,sal_uInt16 > maVKMap; // map some dynamic VK_* entries
+ // must be deleted before exit(), so delete it in DeInitSalData()
+ std::unique_ptr<TextOutRenderer> m_pTextOutRenderer;
inline void SetSalData( SalData* pData ) { ImplGetSVData()->mpSalData = pData; }