diff --git a/include/internal/catch_registry_hub.cpp b/include/internal/catch_registry_hub.cpp index ab5ad361..d98708c5 100644 --- a/include/internal/catch_registry_hub.cpp +++ b/include/internal/catch_registry_hub.cpp @@ -87,6 +87,7 @@ namespace Catch { delete getTheRegistryHub(); getTheRegistryHub() = nullptr; cleanUpContext(); + ReusableStringStream::cleanup(); } std::string translateActiveException() { return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); diff --git a/include/internal/catch_stream.cpp b/include/internal/catch_stream.cpp index 76bbc8f3..125fd471 100644 --- a/include/internal/catch_stream.cpp +++ b/include/internal/catch_stream.cpp @@ -145,6 +145,7 @@ namespace Catch { std::vector> m_streams; std::vector m_unused; std::ostringstream m_referenceStream; // Used for copy state/ flags from + static StringStreams* s_instance; auto add() -> std::size_t { if( m_unused.empty() ) { @@ -165,11 +166,21 @@ namespace Catch { // !TBD: put in TLS static auto instance() -> StringStreams& { - static StringStreams s_stringStreams; - return s_stringStreams; + if( !s_instance ) + s_instance = new StringStreams(); + return *s_instance; + } + static void cleanup() { + delete s_instance; + s_instance = nullptr; } }; + StringStreams* StringStreams::s_instance = nullptr; + + void ReusableStringStream::cleanup() { + StringStreams::cleanup(); + } ReusableStringStream::ReusableStringStream() : m_index( StringStreams::instance().add() ), diff --git a/include/internal/catch_stream.h b/include/internal/catch_stream.h index 2b41adbd..c5e78b22 100644 --- a/include/internal/catch_stream.h +++ b/include/internal/catch_stream.h @@ -43,6 +43,8 @@ namespace Catch { return *this; } auto get() -> std::ostream& { return *m_oss; } + + static void cleanup(); }; }