From fd11ad45333f46bd9314f02f79ab25ae6985e562 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Fri, 2 Sep 2016 01:29:53 -0700 Subject: [PATCH] Fixed crash on exit for Win32 --- ScreenGrab/ScreenGrab.cpp | 10 +++------- ScreenGrab/ScreenGrab12.cpp | 10 +++------- WICTextureLoader/WICTextureLoader.cpp | 10 +++------- WICTextureLoader/WICTextureLoader12.cpp | 10 +++------- 4 files changed, 12 insertions(+), 28 deletions(-) diff --git a/ScreenGrab/ScreenGrab.cpp b/ScreenGrab/ScreenGrab.cpp index 12f1493..e3b94db 100644 --- a/ScreenGrab/ScreenGrab.cpp +++ b/ScreenGrab/ScreenGrab.cpp @@ -701,13 +701,9 @@ namespace IWICImagingFactory* _GetWIC() { - static ComPtr s_Factory; - - if ( s_Factory ) - return s_Factory.Get(); - static INIT_ONCE s_initOnce = INIT_ONCE_STATIC_INIT; + IWICImagingFactory* factory = nullptr; InitOnceExecuteOnce(&s_initOnce, [](PINIT_ONCE, PVOID, PVOID *factory) -> BOOL { @@ -745,9 +741,9 @@ namespace __uuidof(IWICImagingFactory), factory) ) ? TRUE : FALSE; #endif - }, nullptr, reinterpret_cast(s_Factory.GetAddressOf())); + }, nullptr, reinterpret_cast(&factory)); - return s_Factory.Get(); + return factory; } } // anonymous namespace diff --git a/ScreenGrab/ScreenGrab12.cpp b/ScreenGrab/ScreenGrab12.cpp index 2528532..27b019a 100644 --- a/ScreenGrab/ScreenGrab12.cpp +++ b/ScreenGrab/ScreenGrab12.cpp @@ -781,13 +781,9 @@ namespace IWICImagingFactory2* _GetWIC() { - static ComPtr s_Factory; - - if ( s_Factory ) - return s_Factory.Get(); - static INIT_ONCE s_initOnce = INIT_ONCE_STATIC_INIT; + IWICImagingFactory2* factory = nullptr; (void)InitOnceExecuteOnce(&s_initOnce, [](PINIT_ONCE, PVOID, PVOID *factory) -> BOOL { @@ -797,9 +793,9 @@ namespace CLSCTX_INPROC_SERVER, __uuidof(IWICImagingFactory2), factory) ) ? TRUE : FALSE; - }, nullptr, reinterpret_cast(s_Factory.GetAddressOf())); + }, nullptr, reinterpret_cast(&factory)); - return s_Factory.Get(); + return factory; } } // anonymous namespace diff --git a/WICTextureLoader/WICTextureLoader.cpp b/WICTextureLoader/WICTextureLoader.cpp index f2b2245..7f51cf4 100644 --- a/WICTextureLoader/WICTextureLoader.cpp +++ b/WICTextureLoader/WICTextureLoader.cpp @@ -168,13 +168,9 @@ namespace //-------------------------------------------------------------------------------------- IWICImagingFactory* _GetWIC() { - static ComPtr s_Factory; - - if ( s_Factory ) - return s_Factory.Get(); - static INIT_ONCE s_initOnce = INIT_ONCE_STATIC_INIT; + IWICImagingFactory* factory = nullptr; InitOnceExecuteOnce(&s_initOnce, [](PINIT_ONCE, PVOID, PVOID *factory) -> BOOL { @@ -212,9 +208,9 @@ namespace __uuidof(IWICImagingFactory), factory) ) ? TRUE : FALSE; #endif - }, nullptr, reinterpret_cast(s_Factory.GetAddressOf())); + }, nullptr, reinterpret_cast(&factory)); - return s_Factory.Get(); + return factory; } //--------------------------------------------------------------------------------- diff --git a/WICTextureLoader/WICTextureLoader12.cpp b/WICTextureLoader/WICTextureLoader12.cpp index acc86ef..f0dc9a7 100644 --- a/WICTextureLoader/WICTextureLoader12.cpp +++ b/WICTextureLoader/WICTextureLoader12.cpp @@ -149,13 +149,9 @@ namespace IWICImagingFactory2* _GetWIC() { - static ComPtr s_Factory; - - if ( s_Factory ) - return s_Factory.Get(); - static INIT_ONCE s_initOnce = INIT_ONCE_STATIC_INIT; + IWICImagingFactory2* factory = nullptr; (void)InitOnceExecuteOnce(&s_initOnce, [](PINIT_ONCE, PVOID, PVOID *factory) -> BOOL { @@ -165,9 +161,9 @@ namespace CLSCTX_INPROC_SERVER, __uuidof(IWICImagingFactory2), factory) ) ? TRUE : FALSE; - }, nullptr, reinterpret_cast(s_Factory.GetAddressOf())); + }, nullptr, reinterpret_cast(&factory)); - return s_Factory.Get(); + return factory; } //---------------------------------------------------------------------------------