فهرست منبع

BUG: fix crash when running ctest coverage for VTK

Bill Hoffman 16 سال پیش
والد
کامیت
15ad6db170
1فایلهای تغییر یافته به همراه12 افزوده شده و 0 حذف شده
  1. 12 0
      Source/CTest/cmCTestBuildAndTestHandler.cxx

+ 12 - 0
Source/CTest/cmCTestBuildAndTestHandler.cxx

@@ -159,6 +159,14 @@ void CMakeStdoutCallback(const char* m, int len, void* s)
   std::string* out = (std::string*)s;
   std::string* out = (std::string*)s;
   out->append(m, len);
   out->append(m, len);
 }
 }
+struct cmSetupOutputCaptureCleanup
+{
+  ~cmSetupOutputCaptureCleanup()
+  {
+    cmSystemTools::SetErrorCallback(0, 0);
+    cmSystemTools::SetStdoutCallback(0, 0);
+  }
+};
 
 
 //----------------------------------------------------------------------
 //----------------------------------------------------------------------
 int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
 int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
@@ -167,6 +175,10 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
   std::string cmakeOutString;
   std::string cmakeOutString;
   cmSystemTools::SetErrorCallback(CMakeMessageCallback, &cmakeOutString);
   cmSystemTools::SetErrorCallback(CMakeMessageCallback, &cmakeOutString);
   cmSystemTools::SetStdoutCallback(CMakeStdoutCallback, &cmakeOutString);
   cmSystemTools::SetStdoutCallback(CMakeStdoutCallback, &cmakeOutString);
+  // make sure SetStdoutCallback and SetErrorCallback are set to null
+  // after this function exits so that they do not point at a destroyed
+  // string cmakeOutString
+  cmSetupOutputCaptureCleanup cleanup;
   cmOStringStream out;
   cmOStringStream out;
 
 
   // if the generator and make program are not specified then it is an error
   // if the generator and make program are not specified then it is an error