From f8d7043ad054e5565b2688cec99a0917adb1f4af Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 1 Sep 2017 17:58:54 +0100 Subject: [PATCH] Don't leak iconv handle --- renderdoc/core/core.cpp | 2 ++ renderdoc/os/os_specific.h | 2 ++ renderdoc/os/posix/android/android_stringio.cpp | 4 ++++ renderdoc/os/posix/apple/apple_stringio.cpp | 4 ++++ renderdoc/os/posix/linux/linux_stringio.cpp | 7 +++++++ renderdoc/os/win32/win32_stringio.cpp | 4 ++++ 6 files changed, 23 insertions(+) diff --git a/renderdoc/core/core.cpp b/renderdoc/core/core.cpp index 331f06a11..cf2a6712d 100644 --- a/renderdoc/core/core.cpp +++ b/renderdoc/core/core.cpp @@ -389,6 +389,8 @@ RenderDoc::~RenderDoc() Network::Shutdown(); Threading::Shutdown(); + + StringFormat::Shutdown(); } void RenderDoc::Shutdown() diff --git a/renderdoc/os/os_specific.h b/renderdoc/os/os_specific.h index ceb900655..a76dec80e 100644 --- a/renderdoc/os/os_specific.h +++ b/renderdoc/os/os_specific.h @@ -331,6 +331,8 @@ namespace StringFormat void sntimef(char *str, size_t bufSize, const char *format); string Wide2UTF8(const std::wstring &s); + +void Shutdown(); }; // utility functions, implemented in os_specific.cpp, not per-platform (assuming standard stdarg.h) diff --git a/renderdoc/os/posix/android/android_stringio.cpp b/renderdoc/os/posix/android/android_stringio.cpp index 471dc4a25..5889deae7 100644 --- a/renderdoc/os/posix/android/android_stringio.cpp +++ b/renderdoc/os/posix/android/android_stringio.cpp @@ -101,6 +101,10 @@ string Wide2UTF8(const std::wstring &s) RDCFATAL("Converting wide strings to UTF-8 is not supported on Android!"); return ""; } + +void Shutdown() +{ +} }; namespace OSUtility diff --git a/renderdoc/os/posix/apple/apple_stringio.cpp b/renderdoc/os/posix/apple/apple_stringio.cpp index 6ab51eaa3..497c0806e 100644 --- a/renderdoc/os/posix/apple/apple_stringio.cpp +++ b/renderdoc/os/posix/apple/apple_stringio.cpp @@ -117,6 +117,10 @@ string Wide2UTF8(const std::wstring &s) RDCFATAL("Converting wide strings to UTF-8 is not supported on Apple!"); return ""; } + +void Shutdown() +{ +} }; namespace OSUtility diff --git a/renderdoc/os/posix/linux/linux_stringio.cpp b/renderdoc/os/posix/linux/linux_stringio.cpp index 58cf3520a..35a5b5fd1 100644 --- a/renderdoc/os/posix/linux/linux_stringio.cpp +++ b/renderdoc/os/posix/linux/linux_stringio.cpp @@ -294,6 +294,13 @@ iconv_t iconvWide2UTF8 = (iconv_t)-1; // before creating a temporary iconv_t, or hold two iconv_ts, or something. Threading::CriticalSection lockWide2UTF8; +void Shutdown() +{ + SCOPED_LOCK(lockWide2UTF8); + iconv_close(iconvWide2UTF8); + iconvWide2UTF8 = (iconv_t)-1; +} + string Wide2UTF8(const std::wstring &s) { // include room for null terminator, assuming unicode input (not ucs) diff --git a/renderdoc/os/win32/win32_stringio.cpp b/renderdoc/os/win32/win32_stringio.cpp index 17cb754dc..6258c5600 100644 --- a/renderdoc/os/win32/win32_stringio.cpp +++ b/renderdoc/os/win32/win32_stringio.cpp @@ -659,6 +659,10 @@ void sntimef(char *str, size_t bufSize, const char *format) } } +void Shutdown() +{ +} + string Wide2UTF8(const wstring &s) { int bytes_required = WideCharToMultiByte(CP_UTF8, 0, s.c_str(), -1, NULL, 0, NULL, NULL);