From e033b7031f899a4839881bae5bc83f893fd41f3f Mon Sep 17 00:00:00 2001 From: Allan Odgaard Date: Fri, 22 Feb 2013 16:07:35 +0100 Subject: [PATCH] Avoid non-POD static data in thread The issue here is that the thread can outlive the data. --- Frameworks/scm/src/drivers/git.cc | 6 +++--- Frameworks/scm/src/drivers/svn.cc | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Frameworks/scm/src/drivers/git.cc b/Frameworks/scm/src/drivers/git.cc index dd41b907..4becc41d 100644 --- a/Frameworks/scm/src/drivers/git.cc +++ b/Frameworks/scm/src/drivers/git.cc @@ -9,7 +9,7 @@ OAK_DEBUG_VAR(SCM_Git); static scm::status::type parse_status_flag (std::string const& str) { - static std::map const StatusLetterConversionMap + static auto const StatusLetterConversionMap = new std::map { { "?", scm::status::unversioned }, { "I", scm::status::ignored }, @@ -21,8 +21,8 @@ static scm::status::type parse_status_flag (std::string const& str) { "T", scm::status::modified } // type change, e.g. symbolic link → regular file }; - auto it = StatusLetterConversionMap.find(str); - if(it != StatusLetterConversionMap.end()) + auto it = StatusLetterConversionMap->find(str); + if(it != StatusLetterConversionMap->end()) return it->second; ASSERT_EQ(str, NULL_STR); // we use ‘str’ in the assertion to output the unrecognized status flag diff --git a/Frameworks/scm/src/drivers/svn.cc b/Frameworks/scm/src/drivers/svn.cc index 6b0fb630..39ceca82 100644 --- a/Frameworks/scm/src/drivers/svn.cc +++ b/Frameworks/scm/src/drivers/svn.cc @@ -13,7 +13,7 @@ OAK_DEBUG_VAR(SCM_Svn); static scm::status::type parse_status_string (std::string const& status) { // Based on subversion/svn/status.c (generate_status_desc) - static std::map const StatusMap + static auto const StatusMap = new std::map { { "none", scm::status::none }, { "normal", scm::status::none }, @@ -30,8 +30,8 @@ static scm::status::type parse_status_string (std::string const& status) { "unversioned", scm::status::unversioned }, }; - auto it = StatusMap.find(status); - return it != StatusMap.end() ? it->second : scm::status::unknown; + auto it = StatusMap->find(status); + return it != StatusMap->end() ? it->second : scm::status::unknown; } static void parse_status_output (scm::status_map_t& entries, std::string const& output)