0027254: [Regression] 7.0 types initialization mechanism is not thread-safe on VS2013
authorRoman Lygin <roman.lygin@gmail.com>
Fri, 11 Mar 2016 13:44:55 +0000 (17:44 +0400)
committerabv <abv@opencascade.com>
Sat, 12 Mar 2016 06:17:55 +0000 (09:17 +0300)
The code in Standard_Type::type_instance<T>::get() distinguishes between compilers supporting and not supporting N2660. VS2013 was incorrectly considered as supporting, although the comment stated the opposite.

The fix makes VS2013 treated as not supporting N2660.

src/Standard/Standard_Type.hxx

index c6819aa..243d3c3 100644 (file)
@@ -184,7 +184,7 @@ namespace opencascade {
   template <typename T>
   const Handle(Standard_Type)& type_instance<T>::get ()
   {
-#if (defined(_MSC_VER) && _MSC_VER < 1800) || \
+#if (defined(_MSC_VER) && _MSC_VER < 1900) || \
     (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)) && \
      ! defined(__clang__) && ! defined(__INTEL_COMPILER))
     // ensure that myInstance is instantiated
@@ -207,7 +207,7 @@ namespace opencascade {
   // and is claimed to support N2660 on Linux and on Windows "in VS2015 mode".
   // CLang should support N2660 since version 2.9, but it is not clear how to 
   // check its version reliably (on Linux it says it is GCC 4.2).
-#if (defined(_MSC_VER) && _MSC_VER < 1800) || \
+#if (defined(_MSC_VER) && _MSC_VER < 1900) || \
     (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 3)) && \
      ! defined(__clang__) && ! defined(__INTEL_COMPILER))