--- /dev/null
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/CMakeLists.txt ParaView-4.2.0_SRC.new/CMakeLists.txt
+--- ParaView-4.2.0_SRC/CMakeLists.txt 2014-09-23 18:46:43.000000000 +0400
++++ ParaView-4.2.0_SRC.new/CMakeLists.txt 2014-11-18 15:23:10.000000000 +0300
+@@ -543,8 +543,8 @@
+
+ #----------------------------------------------------------------------------------
+ # Set some flags that affect VTK's modules.
+- set (VTK_NO_PYTHON_THREADS 1 CACHE INTERNAL
+- "Disable Python Threads support" FORCE)
++ set (VTK_NO_PYTHON_THREADS ON CACHE BOOL
++ "Disable Python Threads support")
+ set(VTK_WRAP_PYTHON ${PARAVIEW_ENABLE_PYTHON}
+ CACHE INTERNAL "Should VTK Python wrapping be built?" FORCE)
+
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/ParaViewCore/ClientServerCore/Core/vtkPVPythonInformation.cxx ParaView-4.2.0_SRC.new/ParaViewCore/ClientServerCore/Core/vtkPVPythonInformation.cxx
+--- ParaView-4.2.0_SRC/ParaViewCore/ClientServerCore/Core/vtkPVPythonInformation.cxx 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/ParaViewCore/ClientServerCore/Core/vtkPVPythonInformation.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -100,7 +100,9 @@
+ namespace {
+ bool hasModule(const char *module)
+ {
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject mod(PyImport_ImportModule(module));
++ VTK_PY_GIL_RELEASE
+ bool result = mod;
+ return result;
+ }
+@@ -108,11 +110,13 @@
+ // Returns empty string on error.
+ std::string getModuleAttrAsString(const char *module, const char *attribute)
+ {
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject mod(PyImport_ImportModule(module));
+ if (!mod)
+ {
+ std::ostringstream result;
+ result << "(module '" << module << "' not found)";
++ VTK_PY_GIL_RELEASE
+ return result.str();
+ }
+
+@@ -122,11 +126,13 @@
+ std::ostringstream result;
+ result << "('" << module << "' module found, missing '" << attribute
+ << "' attribute)";
++ VTK_PY_GIL_RELEASE
+ return result.str();
+ }
+
+ std::string result = PyBytes_AsString(attr);
+
++ VTK_PY_GIL_RELEASE
+ return result;
+ }
+
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/ParaViewCore/ClientServerCore/Core/vtkSession.cxx ParaView-4.2.0_SRC.new/ParaViewCore/ClientServerCore/Core/vtkSession.cxx
+--- ParaView-4.2.0_SRC/ParaViewCore/ClientServerCore/Core/vtkSession.cxx 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/ParaViewCore/ClientServerCore/Core/vtkSession.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -30,13 +30,15 @@
+ //----------------------------------------------------------------------------
+ void vtkSession::Activate()
+ {
+- vtkProcessModule::GetProcessModule()->PushActiveSession(this);
++ if(vtkProcessModule::GetProcessModule())
++ vtkProcessModule::GetProcessModule()->PushActiveSession(this);
+ }
+
+ //----------------------------------------------------------------------------
+ void vtkSession::DeActivate()
+ {
+- vtkProcessModule::GetProcessModule()->PopActiveSession(this);
++ if(vtkProcessModule::GetProcessModule())
++ vtkProcessModule::GetProcessModule()->PopActiveSession(this);
+ }
+
+ //----------------------------------------------------------------------------
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/ParaViewCore/ClientServerCore/Rendering/vtkGeometryRepresentation.cxx ParaView-4.2.0_SRC.new/ParaViewCore/ClientServerCore/Rendering/vtkGeometryRepresentation.cxx
+--- ParaView-4.2.0_SRC/ParaViewCore/ClientServerCore/Rendering/vtkGeometryRepresentation.cxx 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/ParaViewCore/ClientServerCore/Rendering/vtkGeometryRepresentation.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -172,6 +172,7 @@
+ if (geomFilter)
+ {
+ geomFilter->SetUseOutline(0);
++ geomFilter->SetTriangulate(0);
+ geomFilter->SetNonlinearSubdivisionLevel(1);
+ geomFilter->SetPassThroughCellIds(1);
+ geomFilter->SetPassThroughPointIds(1);
+@@ -236,7 +237,7 @@
+ vtkPVRenderView::MarkAsRedistributable(inInfo, this);
+
+ // Tell the view if this representation needs ordered compositing. We need
+- // ordered compositing when rendering translucent geometry.
++ // ordered compositing when rendering translucent geometry.
+ if (this->Actor->HasTranslucentPolygonalGeometry())
+ {
+ // We need to extend this condition to consider translucent LUTs once we
+@@ -270,7 +271,7 @@
+ this->LODOutlineFilter->Update();
+ // Pass along the LOD geometry to the view so that it can deliver it to
+ // the rendering node as and when needed.
+- vtkPVRenderView::SetPieceLOD(inInfo, this,
++ vtkPVRenderView::SetPieceLOD(inInfo, this,
+ this->LODOutlineFilter->GetOutputDataObject(0));
+ }
+ else
+@@ -290,7 +291,7 @@
+
+ // Pass along the LOD geometry to the view so that it can deliver it to
+ // the rendering node as and when needed.
+- vtkPVRenderView::SetPieceLOD(inInfo, this,
++ vtkPVRenderView::SetPieceLOD(inInfo, this,
+ this->Decimator->GetOutputDataObject(0));
+ }
+ }
+@@ -780,6 +781,19 @@
+ }
+
+ //----------------------------------------------------------------------------
++void vtkGeometryRepresentation::SetTriangulate(int val)
++{
++ if (vtkPVGeometryFilter::SafeDownCast(this->GeometryFilter))
++ {
++ vtkPVGeometryFilter::SafeDownCast(this->GeometryFilter)->SetTriangulate(val);
++ }
++
++ // since geometry filter needs to execute, we need to mark the representation
++ // modified.
++ this->MarkModified();
++}
++
++//----------------------------------------------------------------------------
+ void vtkGeometryRepresentation::SetNonlinearSubdivisionLevel(int val)
+ {
+ if (vtkPVGeometryFilter::SafeDownCast(this->GeometryFilter))
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/ParaViewCore/ClientServerCore/Rendering/vtkGeometryRepresentation.h ParaView-4.2.0_SRC.new/ParaViewCore/ClientServerCore/Rendering/vtkGeometryRepresentation.h
+--- ParaView-4.2.0_SRC/ParaViewCore/ClientServerCore/Rendering/vtkGeometryRepresentation.h 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/ParaViewCore/ClientServerCore/Rendering/vtkGeometryRepresentation.h 2014-11-18 15:23:10.000000000 +0300
+@@ -19,7 +19,7 @@
+ // It handles non-polygonal datasets by extracting external surfaces. One can
+ // use this representation to show surface/wireframe/points/surface-with-edges.
+ // .SECTION Thanks
+-// The addition of a transformation matrix was supported by CEA/DIF
++// The addition of a transformation matrix was supported by CEA/DIF
+ // Commissariat a l'Energie Atomique, Centre DAM Ile-De-France, Arpajon, France.
+
+ #ifndef __vtkGeometryRepresentation_h
+@@ -109,7 +109,7 @@
+ // Description:
+ // Returns true if this class would like to get ghost-cells if available for
+ // the connection whose information object is passed as the argument.
+- static bool DoRequestGhostCells(vtkInformation* information);
++ static bool DoRequestGhostCells(vtkInformation* information);
+
+ // Description:
+ // Representations that use geometry representation as the internal
+@@ -122,6 +122,7 @@
+ //***************************************************************************
+ // Forwarded to vtkPVGeometryFilter
+ virtual void SetUseOutline(int);
++ void SetTriangulate(int);
+ void SetNonlinearSubdivisionLevel(int);
+
+ //***************************************************************************
+@@ -145,7 +146,7 @@
+ virtual void SetPosition(double, double, double);
+ virtual void SetScale(double, double, double);
+ virtual void SetTexture(vtkTexture*);
+- virtual void SetUserTransform(const double[16]);
++ virtual void SetUserTransform(const double[16]);
+
+ //***************************************************************************
+ // Forwarded to Mapper and LODMapper.
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/ParaViewCore/ServerManager/Core/vtkSMTrace.cxx ParaView-4.2.0_SRC.new/ParaViewCore/ServerManager/Core/vtkSMTrace.cxx
+--- ParaView-4.2.0_SRC/ParaViewCore/ServerManager/Core/vtkSMTrace.cxx 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/ParaViewCore/ServerManager/Core/vtkSMTrace.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -69,6 +69,7 @@
+ #ifdef PARAVIEW_ENABLE_PYTHON
+ // ensure Python interpreter is initialized.
+ vtkPythonInterpreter::Initialize();
++ VTK_PY_GIL_ENSURE
+ this->Internals->TraceModule.TakeReference(PyImport_ImportModule("paraview.smtrace"));
+ if (!this->Internals->TraceModule)
+ {
+@@ -92,6 +93,7 @@
+ this->Internals->CreateItemFunction.TakeReference(NULL);
+ }
+ }
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+
+@@ -115,12 +117,15 @@
+
+ #ifdef PARAVIEW_ENABLE_PYTHON
+ vtkPythonInterpreter::Initialize();
++ VTK_PY_GIL_ENSURE
+ try
+ {
++
+ vtkSmartPyObject module(PyImport_ImportModule("paraview.smstate"));
+ if (!module || PyErr_Occurred())
+ {
+ vtkGenericWarningMacro("Failed to import paraview.smstate module.");
++ VTK_PY_GIL_RELEASE
+ throw 1;
+ }
+
+@@ -132,9 +137,12 @@
+ if (!result || PyErr_Occurred())
+ {
+ vtkGenericWarningMacro("Failed to generate state.");
++ VTK_PY_GIL_RELEASE
+ throw 1;
+ }
+- return vtkStdString(PyString_AsString(result));
++ vtkStdString s(PyString_AsString(result));
++ VTK_PY_GIL_RELEASE
++ return s;
+ }
+ catch (int)
+ {
+@@ -144,6 +152,7 @@
+ PyErr_Clear();
+ }
+ }
++ VTK_PY_GIL_RELEASE
+ #endif
+ (void)propertiesToTraceOnCreate;
+ (void)skipHiddenRepresentations;
+@@ -164,9 +173,11 @@
+ }
+ else
+ {
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject _start_trace_internal(
+ PyObject_CallMethod(vtkSMTrace::ActiveTracer->GetTraceModule(),
+ const_cast<char*>("_start_trace_internal"), NULL));
++ VTK_PY_GIL_RELEASE
+ vtkSMTrace::ActiveTracer->CheckForError();
+ }
+ #endif
+@@ -192,6 +203,7 @@
+ vtkSMTrace::ActiveTracer = NULL;
+
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject _stop_trace_internal(
+ PyObject_CallMethod(active->GetTraceModule(), const_cast<char*>("_stop_trace_internal"), NULL));
+ if (active->CheckForError() == false)
+@@ -199,14 +211,18 @@
+ // no error.
+ if (Py_None != _stop_trace_internal.GetPointer() && _stop_trace_internal.GetPointer() != NULL)
+ {
+- return vtkStdString(PyString_AsString(_stop_trace_internal));
++ vtkStdString s(PyString_AsString(_stop_trace_internal));
++ VTK_PY_GIL_RELEASE
++ return s;
+ }
+ else
+ {
+ vtkGenericWarningMacro("Empty trace returned!!!");
++ VTK_PY_GIL_RELEASE
+ return vtkStdString();
+ }
+ }
++ VTK_PY_GIL_RELEASE
+ #endif
+ return vtkStdString();
+ }
+@@ -223,13 +239,17 @@
+
+ #ifdef PARAVIEW_ENABLE_PYTHON
+ vtkSMTrace* active = vtkSMTrace::ActiveTracer;
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject get_current_trace_output(
+ PyObject_CallMethod(active->GetTraceModule(), const_cast<char*>("get_current_trace_output"), NULL));
+ if (active->CheckForError() == false && get_current_trace_output)
+ {
+ // no error.
+- return vtkStdString(PyString_AsString(get_current_trace_output));
++ vtkStdString s(PyString_AsString(get_current_trace_output));
++ VTK_PY_GIL_RELEASE
++ return s;
+ }
++ VTK_PY_GIL_RELEASE
+ #endif
+ return vtkStdString();
+ }
+@@ -256,6 +276,7 @@
+ bool vtkSMTrace::CheckForError()
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ PyObject *exception = PyErr_Occurred();
+ if (exception)
+ {
+@@ -264,12 +285,15 @@
+ // catch Untraceable exceptions. We can log them when debugging is
+ // enabled.
+ PyErr_Clear();
++ VTK_PY_GIL_RELEASE
+ return false;
+ }
+ PyErr_Print();
+ PyErr_Clear();
++ VTK_PY_GIL_RELEASE
+ return true;
+ }
++ VTK_PY_GIL_RELEASE
+ #endif
+ return false;
+ }
+@@ -336,6 +360,7 @@
+ if (vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject keyObj(PyString_FromString(key));
+ vtkSmartPyObject valObj(vtkPythonUtil::GetObjectFromPointer(val));
+ assert(valObj && keyObj);
+@@ -343,6 +368,7 @@
+ int ret = PyDict_SetItem(this->Internals->GetKWArgs(), keyObj, valObj);
+ (void)ret;
+ assert(ret == 0);
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)key;
+@@ -358,6 +384,7 @@
+ if (vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject keyObj(PyString_FromString(key));
+ vtkSmartPyObject valObj;
+ if (val == NULL)
+@@ -374,6 +401,7 @@
+ int ret = PyDict_SetItem(this->Internals->GetKWArgs(), keyObj, valObj);
+ (void)ret;
+ assert(ret == 0);
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)key;
+@@ -389,6 +417,7 @@
+ if (vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject keyObj(PyString_FromString(key));
+ vtkSmartPyObject valObj(PyInt_FromLong(val));
+ assert(keyObj && valObj);
+@@ -396,6 +425,7 @@
+ int ret = PyDict_SetItem(this->Internals->GetKWArgs(), keyObj, valObj);
+ (void)ret;
+ assert(ret == 0);
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)key;
+@@ -411,6 +441,7 @@
+ if (vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject keyObj(PyString_FromString(key));
+ vtkSmartPyObject valObj(PyFloat_FromDouble(val));
+ assert(keyObj && valObj);
+@@ -418,6 +449,7 @@
+ int ret = PyDict_SetItem(this->Internals->GetKWArgs(), keyObj, valObj);
+ (void)ret;
+ assert(ret == 0);
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)key;
+@@ -432,6 +464,7 @@
+ if (vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject keyObj(PyString_FromString(key));
+ vtkSmartPyObject valObj(PyBool_FromLong(val? 1 : 0));
+ assert(keyObj && valObj);
+@@ -439,6 +472,7 @@
+ int ret = PyDict_SetItem(this->Internals->GetKWArgs(), keyObj, valObj);
+ (void)ret;
+ assert(ret == 0);
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)key;
+@@ -452,11 +486,13 @@
+ if (vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject valObj(vtkPythonUtil::GetObjectFromPointer(val));
+ assert(valObj);
+ int ret = PyList_Append(this->Internals->GetPositionalArgs(), valObj);
+ (void)ret;
+ assert(ret == 0);
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)val;
+@@ -470,11 +506,13 @@
+ if (vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject valObj(PyString_FromString(val));
+ assert(valObj);
+ int ret = PyList_Append(this->Internals->GetPositionalArgs(), valObj);
+ (void)ret;
+ assert(ret == 0);
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)val;
+@@ -487,11 +525,13 @@
+ if (vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject valObj(PyInt_FromLong(val));
+ assert(valObj);
+ int ret = PyList_Append(this->Internals->GetPositionalArgs(), valObj);
+ (void)ret;
+ assert(ret == 0);
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)val;
+@@ -504,11 +544,13 @@
+ if (vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject valObj(PyFloat_FromDouble(val));
+ assert(valObj);
+ int ret = PyList_Append(this->Internals->GetPositionalArgs(), valObj);
+ (void)ret;
+ assert(ret == 0);
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)val;
+@@ -521,11 +563,13 @@
+ if (vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject valObj(PyBool_FromLong(val? 1 : 0));
+ assert(valObj);
+ int ret = PyList_Append(this->Internals->GetPositionalArgs(), valObj);
+ (void)ret;
+ assert(ret == 0);
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)val;
+@@ -557,9 +601,11 @@
+ vtkSMTrace* tracer = vtkSMTrace::GetActiveTracer();
+ if (tracer && this->Internals->PyItem)
+ {
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject reply(
+ PyObject_CallMethod(this->Internals->PyItem,
+ const_cast<char*>("finalize"), NULL));
++ VTK_PY_GIL_RELEASE
+ tracer->CheckForError();
+ tracer->InvokeEvent(vtkCommand::UpdateEvent);
+ }
+@@ -583,6 +629,7 @@
+ if (vtkSMTrace* tracer = vtkSMTrace::GetActiveTracer())
+ {
+ #ifdef PARAVIEW_ENABLE_PYTHON
++ VTK_PY_GIL_ENSURE
+ assert(tracer->GetTraceModule());
+ assert(tracer->GetCreateItemFunction());
+
+@@ -613,6 +660,7 @@
+ this->Internals->PyItem.TakeReference(
+ PyObject_Call(tracer->GetCreateItemFunction(), args, NULL));
+ tracer->CheckForError();
++ VTK_PY_GIL_RELEASE
+ #endif
+ }
+ (void)arguments;
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/ParaViewCore/ServerManager/Rendering/vtkSMPVRepresentationProxy.cxx ParaView-4.2.0_SRC.new/ParaViewCore/ServerManager/Rendering/vtkSMPVRepresentationProxy.cxx
+--- ParaView-4.2.0_SRC/ParaViewCore/ServerManager/Rendering/vtkSMPVRepresentationProxy.cxx 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/ParaViewCore/ServerManager/Rendering/vtkSMPVRepresentationProxy.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -276,7 +276,7 @@
+ {
+ if (!info)
+ {
+- vtkWarningMacro("Could not determine array range.");
++ // vtkWarningMacro("Could not determine array range.");
+ return false;
+ }
+
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/ParaViewCore/ServerManager/SMApplication/Resources/views_and_representations.xml ParaView-4.2.0_SRC.new/ParaViewCore/ServerManager/SMApplication/Resources/views_and_representations.xml
+--- ParaView-4.2.0_SRC/ParaViewCore/ServerManager/SMApplication/Resources/views_and_representations.xml 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/ParaViewCore/ServerManager/SMApplication/Resources/views_and_representations.xml 2014-11-18 15:25:05.000000000 +0300
+@@ -2044,16 +2044,14 @@
+ <IntVectorProperty command="SetStereoRender"
+ default_values="0"
+ name="StereoRender"
+- number_of_elements="1"
+- is_internal="1">
++ number_of_elements="1">
+ <BooleanDomain name="bool" />
+ </IntVectorProperty>
+ <IntVectorProperty command="SetStereoType"
+ default_values="3"
+ name="StereoType"
+ panel_visibility="never"
+- number_of_elements="1"
+- is_internal="1">
++ number_of_elements="1">
+ <EnumerationDomain name="enum">
+ <Entry text="Crystal Eyes"
+ value="1" />
+@@ -3139,6 +3137,8 @@
+ panel_visibility="advanced" />
+ <Property name="UserTransform"
+ panel_visibility="never" />
++ <Property name="Triangulate"
++ panel_visibility="advanced" />
+ <Property name="NonlinearSubdivisionLevel"
+ panel_visibility="advanced" />
+ <Property name="BlockVisibility"
+@@ -8229,6 +8229,15 @@
+ <!--<Entry value="2" text="Phong" />-->
+ </EnumerationDomain>
+ </IntVectorProperty>
++ <IntVectorProperty command="SetTriangulate"
++ default_values="0"
++ name="Triangulate"
++ number_of_elements="1">
++ <BooleanDomain name="bool" />
++ <Documentation>Triangulate the geometry internally to avoid rendering
++ issues of non-convex polygons. This feature has a processing and memory
++ cost, it should be enabled only when needed.</Documentation>
++ </IntVectorProperty>
+ <IntVectorProperty command="SetNonlinearSubdivisionLevel"
+ default_values="1"
+ name="NonlinearSubdivisionLevel"
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/ParaViewCore/VTKExtensions/Default/vtkPVImageReader.h ParaView-4.2.0_SRC.new/ParaViewCore/VTKExtensions/Default/vtkPVImageReader.h
+--- ParaView-4.2.0_SRC/ParaViewCore/VTKExtensions/Default/vtkPVImageReader.h 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/ParaViewCore/VTKExtensions/Default/vtkPVImageReader.h 2014-11-18 15:23:10.000000000 +0300
+@@ -19,27 +19,15 @@
+
+ #include "vtkPVVTKExtensionsDefaultModule.h" //needed for exports
+
+-#ifdef PARAVIEW_USE_MPI
+-#include "vtkMPIImageReader.h"
+-#else
+ #include "vtkImageReader.h"
+-#endif
+
+-class VTKPVVTKEXTENSIONSDEFAULT_EXPORT vtkPVImageReader : public
+-#ifdef PARAVIEW_USE_MPI
+-vtkMPIImageReader
+-#else
+-vtkImageReader
+-#endif
++class VTKPVVTKEXTENSIONSDEFAULT_EXPORT vtkPVImageReader : public vtkImageReader
+ {
+ public:
+ static vtkPVImageReader* New();
+
+-#ifdef PARAVIEW_USE_MPI
+- vtkTypeMacro(vtkPVImageReader, vtkMPIImageReader);
+-#else
++
+ vtkTypeMacro(vtkPVImageReader, vtkImageReader);
+-#endif
+
+ void PrintSelf(ostream& os, vtkIndent indent);
+
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/ParaViewCore/VTKExtensions/Rendering/vtkPVGeometryFilter.cxx ParaView-4.2.0_SRC.new/ParaViewCore/VTKExtensions/Rendering/vtkPVGeometryFilter.cxx
+--- ParaView-4.2.0_SRC/ParaViewCore/VTKExtensions/Rendering/vtkPVGeometryFilter.cxx 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/ParaViewCore/VTKExtensions/Rendering/vtkPVGeometryFilter.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -64,6 +64,7 @@
+ #include "vtkStructuredGrid.h"
+ #include "vtkStructuredGridOutlineFilter.h"
+ #include "vtkTimerLog.h"
++#include "vtkTriangleFilter.h"
+ #include "vtkUniformGrid.h"
+ #include "vtkUnsignedCharArray.h"
+ #include "vtkUnsignedIntArray.h"
+@@ -78,8 +79,6 @@
+ #include <set>
+ #include <algorithm>
+
+-#define VTK_CREATE(type, name) \
+- vtkSmartPointer<type> name = vtkSmartPointer<type>::New()
+
+ vtkStandardNewMacro(vtkPVGeometryFilter);
+ vtkCxxSetObjectMacro(vtkPVGeometryFilter, Controller, vtkMultiProcessController);
+@@ -149,6 +148,7 @@
+ this->UseOutline = 1;
+ this->UseStrips = 0;
+ this->GenerateCellNormals = 1;
++ this->Triangulate = false;
+ this->NonlinearSubdivisionLevel = 1;
+
+ this->DataSetSurfaceFilter = vtkDataSetSurfaceFilter::New();
+@@ -1348,8 +1348,8 @@
+ {
+ this->OutlineFlag = 0;
+
+- bool handleSubdivision = false;
+- if (this->NonlinearSubdivisionLevel > 0)
++ bool handleSubdivision = (this->Triangulate != 0);
++ if (!handleSubdivision && (this->NonlinearSubdivisionLevel > 0))
+ {
+ // Check to see if the data actually has nonlinear cells. Handling
+ // nonlinear cells adds unnecessary work if we only have linear cells.
+@@ -1445,6 +1445,16 @@
+ this->DataSetSurfaceFilter->UnstructuredGridExecute(input, output, updateghostlevel);
+ }
+
++ if (this->Triangulate && (output->GetNumberOfPolys() > 0))
++ {
++ // Triangulate the polygonal mesh if requested to avoid rendering
++ // issues of non-convex polygons.
++ vtkNew<vtkTriangleFilter> triangleFilter;
++ triangleFilter->SetInputData(output);
++ triangleFilter->Update();
++ output->ShallowCopy(triangleFilter->GetOutput());
++ }
++
+ if (handleSubdivision)
+ {
+ // Restore state of DataSetSurfaceFilter.
+@@ -1456,9 +1466,9 @@
+
+ // Now use vtkPVRecoverGeometryWireframe to create an edge flag attribute
+ // that will cause the wireframe to be rendered correctly.
+- VTK_CREATE(vtkPolyData, nextStageInput);
++ vtkNew<vtkPolyData> nextStageInput;
+ nextStageInput->ShallowCopy(output); // Yes output is correct.
+- this->RecoverWireframeFilter->SetInputData(nextStageInput);
++ this->RecoverWireframeFilter->SetInputData(nextStageInput.Get());
+
+ // Observe the progress of the internal filter.
+ // TODO: Make the consecutive internal filter execution have monotonically
+@@ -1489,7 +1499,7 @@
+ return;
+ }
+ vtkIdType numPts = polyPtIds2FacePtIds->GetNumberOfTuples();
+- VTK_CREATE(vtkIdTypeArray, polyPtIds2OriginalPtIds);
++ vtkNew<vtkIdTypeArray> polyPtIds2OriginalPtIds;
+ polyPtIds2OriginalPtIds->SetName("vtkOriginalPointIds");
+ polyPtIds2OriginalPtIds->SetNumberOfComponents(1);
+ polyPtIds2OriginalPtIds->SetNumberOfTuples(numPts);
+@@ -1503,7 +1513,7 @@
+ }
+ polyPtIds2OriginalPtIds->SetValue(polyPtId, originalPtId);
+ }
+- output->GetPointData()->AddArray(polyPtIds2OriginalPtIds);
++ output->GetPointData()->AddArray(polyPtIds2OriginalPtIds.Get());
+ }
+ }
+
+@@ -1518,7 +1528,7 @@
+
+ //----------------------------------------------------------------------------
+ void vtkPVGeometryFilter::PolyDataExecute(
+- vtkPolyData* input, vtkPolyData* out, int doCommunicate)
++ vtkPolyData* input, vtkPolyData* output, int doCommunicate)
+ {
+ if (!this->UseOutline)
+ {
+@@ -1533,54 +1543,90 @@
+ inCopy->RemoveGhostCells(1);
+ stripper->SetInputData(inCopy);
+ stripper->Update();
+- out->CopyStructure(stripper->GetOutput());
+- out->GetPointData()->ShallowCopy(stripper->GetOutput()->GetPointData());
+- out->GetCellData()->ShallowCopy(stripper->GetOutput()->GetCellData());
++ output->CopyStructure(stripper->GetOutput());
++ output->GetPointData()->ShallowCopy(stripper->GetOutput()->GetPointData());
++ output->GetCellData()->ShallowCopy(stripper->GetOutput()->GetCellData());
+ inCopy->Delete();
+ stripper->Delete();
+ }
+ else
+ {
+- out->ShallowCopy(input);
++ output->ShallowCopy(input);
+ if (this->PassThroughCellIds)
+ {
+- vtkIdTypeArray *originalCellIds = vtkIdTypeArray::New();
++ vtkNew<vtkIdTypeArray> originalCellIds;
+ originalCellIds->SetName("vtkOriginalCellIds");
+ originalCellIds->SetNumberOfComponents(1);
+- vtkCellData *outputCD = out->GetCellData();
+- outputCD->AddArray(originalCellIds);
+- vtkIdType numTup = out->GetNumberOfCells();
++ vtkNew<vtkIdTypeArray> originalFaceIds;
++ originalFaceIds->SetName(vtkPVRecoverGeometryWireframe::ORIGINAL_FACE_IDS());
++ originalFaceIds->SetNumberOfComponents(1);
++ vtkCellData *outputCD = output->GetCellData();
++ outputCD->AddArray(originalCellIds.Get());
++ if (this->Triangulate)
++ {
++ outputCD->AddArray(originalFaceIds.Get());
++ }
++ vtkIdType numTup = output->GetNumberOfCells();
+ originalCellIds->SetNumberOfValues(numTup);
++ originalFaceIds->SetNumberOfValues(numTup);
+ for (vtkIdType cId = 0; cId < numTup; cId++)
+ {
+ originalCellIds->SetValue(cId, cId);
++ originalFaceIds->SetValue(cId, cId);
+ }
+- originalCellIds->Delete();
+- originalCellIds = NULL;
+ }
+ if (this->PassThroughPointIds)
+ {
+- vtkIdTypeArray *originalPointIds = vtkIdTypeArray::New();
++ vtkNew<vtkIdTypeArray> originalPointIds;
+ originalPointIds->SetName("vtkOriginalPointIds");
+ originalPointIds->SetNumberOfComponents(1);
+- vtkPointData *outputPD = out->GetPointData();
+- outputPD->AddArray(originalPointIds);
+- vtkIdType numTup = out->GetNumberOfPoints();
++ vtkPointData *outputPD = output->GetPointData();
++ outputPD->AddArray(originalPointIds.Get());
++ vtkIdType numTup = output->GetNumberOfPoints();
+ originalPointIds->SetNumberOfValues(numTup);
+ for (vtkIdType pId = 0; pId < numTup; pId++)
+ {
+ originalPointIds->SetValue(pId, pId);
+ }
+- originalPointIds->Delete();
+- originalPointIds = NULL;
+ }
+- out->RemoveGhostCells(1);
++
++ output->RemoveGhostCells(1);
++
++ if (this->Triangulate)
++ {
++ // Triangulate the polygonal mesh.
++ vtkNew<vtkTriangleFilter> triangleFilter;
++ triangleFilter->SetInputData(output);
++ triangleFilter->Update();
++
++ // Now use vtkPVRecoverGeometryWireframe to create an edge flag attribute
++ // that will cause the wireframe to be rendered correctly.
++ this->RecoverWireframeFilter->SetInputData(triangleFilter->GetOutput());
++
++ // Observe the progress of the internal filter.
++ // TODO: Make the consecutive internal filter execution have monotonically
++ // increasing progress rather than restarting for every internal filter.
++ this->RecoverWireframeFilter->AddObserver(
++ vtkCommand::ProgressEvent,
++ this->InternalProgressObserver);
++ this->RecoverWireframeFilter->Update();
++ // The internal filter finished. Remove the observer.
++ this->RecoverWireframeFilter->RemoveObserver(
++ this->InternalProgressObserver);
++
++ this->RecoverWireframeFilter->SetInputData(NULL);
++
++ // Get what should be the final output.
++ output->ShallowCopy(this->RecoverWireframeFilter->GetOutput());
++
++ output->GetCellData()->RemoveArray(vtkPVRecoverGeometryWireframe::ORIGINAL_FACE_IDS());
++ }
+ }
+ return;
+ }
+
+ this->OutlineFlag = 1;
+- this->DataSetExecute(input, out, doCommunicate);
++ this->DataSetExecute(input, output, doCommunicate);
+ }
+
+ //----------------------------------------------------------------------------
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/ParaViewCore/VTKExtensions/Rendering/vtkPVGeometryFilter.h ParaView-4.2.0_SRC.new/ParaViewCore/VTKExtensions/Rendering/vtkPVGeometryFilter.h
+--- ParaView-4.2.0_SRC/ParaViewCore/VTKExtensions/Rendering/vtkPVGeometryFilter.h 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/ParaViewCore/VTKExtensions/Rendering/vtkPVGeometryFilter.h 2014-11-18 15:23:10.000000000 +0300
+@@ -85,6 +85,13 @@
+ vtkBooleanMacro(GenerateCellNormals, int);
+
+ // Description:
++ // Whether to triangulate mesh for rendering. This parameter avoid
++ // rendering issues of non-convex polygons.
++ vtkSetMacro(Triangulate, int);
++ vtkGetMacro(Triangulate, int);
++ vtkBooleanMacro(Triangulate, int);
++
++ // Description:
+ // Nonlinear faces are approximated with flat polygons. This parameter
+ // controls how many times to subdivide nonlinear surface cells. Higher
+ // subdivisions generate closer approximations but take more memory and
+@@ -101,8 +108,7 @@
+ // Description:
+ // If on, the output polygonal dataset will have a celldata array that
+ // holds the cell index of the original 3D cell that produced each output
+- // cell. This is useful for picking. The default is off to conserve
+- // memory.
++ // cell. This is useful for picking but it takes memory. The default is on.
+ void SetPassThroughCellIds(int);
+ vtkGetMacro(PassThroughCellIds,int);
+ vtkBooleanMacro(PassThroughCellIds,int);
+@@ -110,8 +116,7 @@
+ // Description:
+ // If on, the output polygonal dataset will have a pointdata array that
+ // holds the point index of the original vertex that produced each output
+- // vertex. This is useful for picking. The default is off to conserve
+- // memory.
++ // vertex. This is useful for picking but it takes memory. The default is on.
+ void SetPassThroughPointIds(int);
+ vtkGetMacro(PassThroughPointIds,int);
+ vtkBooleanMacro(PassThroughPointIds,int);
+@@ -176,7 +181,7 @@
+ virtual vtkExecutive* CreateDefaultExecutive();
+
+ // Description:
+- // Produce geometry for a block in the dataset.
++ // Produce geometry for a block in the dataset.
+ // This does not handle producing outlines. Call only when this->UseOutline ==
+ // 0; \c extractface mask it is used to determine external faces.
+ void ExecuteAMRBlock(vtkUniformGrid* input,
+@@ -250,6 +255,7 @@
+ int UseOutline;
+ int UseStrips;
+ int GenerateCellNormals;
++ int Triangulate;
+ int NonlinearSubdivisionLevel;
+
+ vtkMultiProcessController* Controller;
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/Qt/Components/pqPropertiesPanel.cxx ParaView-4.2.0_SRC.new/Qt/Components/pqPropertiesPanel.cxx
+--- ParaView-4.2.0_SRC/Qt/Components/pqPropertiesPanel.cxx 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/Qt/Components/pqPropertiesPanel.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -383,6 +383,14 @@
+ this->Internals->Ui.DisplayButton->setVisible(has_multiples_types && has_display);
+ this->Internals->Ui.ViewButton->setVisible(has_multiples_types && has_view);
+
++ // added to avoid unwanted save restore buttons
++ this->Internals->Ui.PropertiesSaveAsDefaults->setVisible(has_source);
++ this->Internals->Ui.PropertiesRestoreDefaults->setVisible(has_source);
++ this->Internals->Ui.DisplaySaveAsDefaults->setVisible(has_display);
++ this->Internals->Ui.DisplayRestoreDefaults->setVisible(has_display);
++ this->Internals->Ui.ViewSaveAsDefaults->setVisible(has_view);
++ this->Internals->Ui.ViewRestoreDefaults->setVisible(has_view);
++
+ this->updatePanel();
+ }
+
+@@ -593,14 +601,15 @@
+ }
+
+ //-----------------------------------------------------------------------------
+-void pqPropertiesPanel::updateViewPanel (pqView* _view)
++void pqPropertiesPanel::updateViewPanel (pqView* argView)
+ {
++ pqView* _view = argView;
+ if ( (this->PanelMode & pqPropertiesPanel::VIEW_PROPERTIES) == 0)
+ {
+ _view = NULL;
+ }
+
+- if (this->Internals->View != _view)
++ if (this->Internals->View != argView)
+ {
+ // The view has changed.
+ if (this->Internals->View)
+@@ -611,8 +620,8 @@
+ delete this->Internals->ViewWidgets;
+ }
+ }
+- this->Internals->View = _view;
+- emit this->viewChanged(_view);
++ this->Internals->View = argView;
++ emit this->viewChanged(argView);
+ if (_view)
+ {
+ // create the widgets for this view
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/Qt/Python/pqPythonSyntaxHighlighter.cxx ParaView-4.2.0_SRC.new/Qt/Python/pqPythonSyntaxHighlighter.cxx
+--- ParaView-4.2.0_SRC/Qt/Python/pqPythonSyntaxHighlighter.cxx 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/Qt/Python/pqPythonSyntaxHighlighter.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -65,6 +65,7 @@
+ this->Internals->TextEdit = textEdit;
+ this->Internals->TextEdit->installEventFilter(this);
+ vtkPythonInterpreter::Initialize();
++ VTK_PY_GIL_ENSURE
+ this->Internals->PygmentsModule.TakeReference(PyImport_ImportModule("pygments"));
+ if (this->Internals->PygmentsModule && this->Internals->TextEdit != NULL)
+ {
+@@ -99,6 +100,7 @@
+ this->connect(this->Internals->TextEdit.data(), SIGNAL(textChanged()),
+ this, SLOT(rehighlightSyntax()));
+ }
++ VTK_PY_GIL_RELEASE
+ this->Internals->IsSyntaxHighlighting = false;
+ // Replace tabs with 4 spaces
+ this->Internals->ReplaceTabs = true;
+@@ -175,10 +177,12 @@
+ }
+ QString leadingWhitespace = text.left(leadingWhiteSpaceLength);
+ QString trailingWhitespace = text.right(trailingWhiteSpaceLength);
++ VTK_PY_GIL_ENSURE
+ vtkSmartPyObject args(Py_BuildValue("sOO",text.trimmed().toStdString().c_str(),
+ this->Internals->PythonLexer.GetPointer(),this->Internals->HtmlFormatter.GetPointer()));
+ vtkSmartPyObject resultingText(PyObject_Call(this->Internals->HighlightFunction,args,NULL));
+ const char *resultingTextAsCString = PyString_AsString(resultingText);
++ VTK_PY_GIL_RELEASE
+ QString pygmentsOutput(resultingTextAsCString);
+ // the first span tag always should follow the pre tag like this; <pre ...><span
+ int startOfPre = pygmentsOutput.indexOf(">",pygmentsOutput.indexOf("<pre"))+1;
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/Utilities/VisItBridge/databases/Velodyne/VelodyneReader.C ParaView-4.2.0_SRC.new/Utilities/VisItBridge/databases/Velodyne/VelodyneReader.C
+--- ParaView-4.2.0_SRC/Utilities/VisItBridge/databases/Velodyne/VelodyneReader.C 2014-09-23 18:46:46.000000000 +0400
++++ ParaView-4.2.0_SRC.new/Utilities/VisItBridge/databases/Velodyne/VelodyneReader.C 2014-11-18 15:23:10.000000000 +0300
+@@ -2,7 +2,7 @@
+ // This code was contributed to the VisIt project by Corvid Technologies
+ // on February 10, 2010.
+ //
+-
++#define H5Eset_auto_vers 2
+ #include <string.h>
+ #include <cstdlib>
+
+@@ -16,7 +16,6 @@
+ #endif
+
+ #include <VelodyneReader.h>
+-
+ #include <visit-hdf5.h>
+
+ #include <set>
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/Utilities/VisItBridge/databases/Vs/VsFilter.C ParaView-4.2.0_SRC.new/Utilities/VisItBridge/databases/Vs/VsFilter.C
+--- ParaView-4.2.0_SRC/Utilities/VisItBridge/databases/Vs/VsFilter.C 2014-09-23 18:46:46.000000000 +0400
++++ ParaView-4.2.0_SRC.new/Utilities/VisItBridge/databases/Vs/VsFilter.C 2014-11-18 15:23:10.000000000 +0300
+@@ -1,3 +1,7 @@
++#define H5Gopen_vers 2
++#define H5Dopen_vers 2
++#define H5Eset_auto_vers 2
++#define H5Aiterate_vers 2
+ #include <vtk_hdf5.h>
+ #include <visit-hdf5.h>
+ #if HDF5_VERSION_GE(1,8,1)
+@@ -146,11 +150,7 @@
+
+ // Get info of the linked object.
+ H5O_info_t objinfo;
+-#ifndef H5_USE_16_API
+ hid_t obj_id = H5Oopen(locId, name, H5P_DEFAULT);
+-#else
+- hid_t obj_id = H5Oopen(locId, name);
+-#endif
+
+ if (obj_id < 0) {
+ VsLog::errorLog() <<"VsFilter::visitLinks() - unable to get id for external object " <<name <<std::endl;
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/Utilities/VisItBridge/databases/Vs/VsH5File.C ParaView-4.2.0_SRC.new/Utilities/VisItBridge/databases/Vs/VsH5File.C
+--- ParaView-4.2.0_SRC/Utilities/VisItBridge/databases/Vs/VsH5File.C 2014-09-23 18:46:46.000000000 +0400
++++ ParaView-4.2.0_SRC.new/Utilities/VisItBridge/databases/Vs/VsH5File.C 2014-11-18 15:23:10.000000000 +0300
+@@ -4,7 +4,7 @@
+ * Created on: Apr 27, 2010
+ * Author: mdurant
+ */
+-
++#define H5Eset_auto_vers 2
+ #include "VsH5File.h"
+ #include "VsLog.h"
+ #include "VsFilter.h"
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/VTK/CMake/vtkModuleTop.cmake ParaView-4.2.0_SRC.new/VTK/CMake/vtkModuleTop.cmake
+--- ParaView-4.2.0_SRC/VTK/CMake/vtkModuleTop.cmake 2014-09-23 18:47:10.000000000 +0400
++++ ParaView-4.2.0_SRC.new/VTK/CMake/vtkModuleTop.cmake 2014-11-18 15:23:10.000000000 +0300
+@@ -476,6 +476,7 @@
+ get_property(VTK_TARGETS GLOBAL PROPERTY VTK_TARGETS)
+ if(VTK_TARGETS)
+ install(EXPORT ${VTK_INSTALL_EXPORT_NAME} DESTINATION ${VTK_INSTALL_PACKAGE_DIR})
++ install(EXPORT ${VTK_INSTALL_EXPORT_NAME} DESTINATION ${VTK_INSTALL_PACKAGE_DIR} FILE VTKTargets.cmake)
+ else()
+ set(CMAKE_CONFIGURABLE_FILE_CONTENT "# No targets!")
+ configure_file(${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/VTK/Rendering/Matplotlib/vtkMatplotlibMathTextUtilities.cxx ParaView-4.2.0_SRC.new/VTK/Rendering/Matplotlib/vtkMatplotlibMathTextUtilities.cxx
+--- ParaView-4.2.0_SRC/VTK/Rendering/Matplotlib/vtkMatplotlibMathTextUtilities.cxx 2014-09-23 18:47:11.000000000 +0400
++++ ParaView-4.2.0_SRC.new/VTK/Rendering/Matplotlib/vtkMatplotlibMathTextUtilities.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -48,7 +48,7 @@
+ //----------------------------------------------------------------------------
+ vtkMatplotlibMathTextUtilities::Availablity
+ vtkMatplotlibMathTextUtilities::MPLMathTextAvailable =
+-vtkMatplotlibMathTextUtilities::NOT_TESTED;
++vtkMatplotlibMathTextUtilities::UNAVAILABLE;
+
+ // A macro that is used in New() to print warnings if VTK_MATPLOTLIB_DEBUG
+ // is defined in the environment. Use vtkGenericWarningMacro to allow this to
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/VTK/ThirdParty/verdict/vtkverdict/V_TetMetric.cpp ParaView-4.2.0_SRC.new/VTK/ThirdParty/verdict/vtkverdict/V_TetMetric.cpp
+--- ParaView-4.2.0_SRC/VTK/ThirdParty/verdict/vtkverdict/V_TetMetric.cpp 2014-09-23 18:47:11.000000000 +0400
++++ ParaView-4.2.0_SRC.new/VTK/ThirdParty/verdict/vtkverdict/V_TetMetric.cpp 2014-11-18 15:23:10.000000000 +0300
+@@ -373,7 +373,7 @@
+ coordinates[3][1] - coordinates[0][1],
+ coordinates[3][2] - coordinates[0][2] );
+
+- double detTet = ab % ( ac * ad );
++ double detTet = fabs( ab % ( ac * ad ) );
+
+ if( detTet < VERDICT_DBL_MIN )
+ return (double)VERDICT_DBL_MAX;
+@@ -413,7 +413,7 @@
+ D = bd.length();
+
+ double aspect_ratio;
+- aspect_ratio = normal_coeff * hm * ( A + B + C + D ) / fabs( detTet );
++ aspect_ratio = normal_coeff * hm * ( A + B + C + D ) / detTet;
+
+ if( aspect_ratio > 0 )
+ return (double) VERDICT_MIN( aspect_ratio, VERDICT_DBL_MAX );
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/VTK/Utilities/Python/vtkPython.h ParaView-4.2.0_SRC.new/VTK/Utilities/Python/vtkPython.h
+--- ParaView-4.2.0_SRC/VTK/Utilities/Python/vtkPython.h 2014-09-23 18:47:11.000000000 +0400
++++ ParaView-4.2.0_SRC.new/VTK/Utilities/Python/vtkPython.h 2014-11-18 15:23:10.000000000 +0300
+@@ -87,4 +87,14 @@
+ #error "Python.h is different version from what VTK was configured with!!"
+ #endif
+
++#ifdef VTK_NO_PYTHON_THREADS
++# define VTK_PY_GIL_ENSURE
++# define VTK_PY_GIL_RELEASE
++#else
++# define VTK_PY_GIL_ENSURE PyGILState_STATE _gstate_avoid_clash = PyGILState_Ensure();
++# define VTK_PY_GIL_RELEASE PyGILState_Release(_gstate_avoid_clash);
++#
++#endif
++
++
+ #endif
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/VTK/Utilities/PythonInterpreter/vtkPythonInteractiveInterpreter.cxx ParaView-4.2.0_SRC.new/VTK/Utilities/PythonInterpreter/vtkPythonInteractiveInterpreter.cxx
+--- ParaView-4.2.0_SRC/VTK/Utilities/PythonInterpreter/vtkPythonInteractiveInterpreter.cxx 2014-09-23 18:47:11.000000000 +0400
++++ ParaView-4.2.0_SRC.new/VTK/Utilities/PythonInterpreter/vtkPythonInteractiveInterpreter.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -45,6 +45,7 @@
+
+ void CleanupPythonObjects()
+ {
++ VTK_PY_GIL_ENSURE
+ Py_XDECREF(this->InteractiveConsoleLocals);
+ Py_XDECREF(this->InteractiveConsole);
+ this->InteractiveConsole = NULL;
+@@ -54,6 +55,7 @@
+ const char* code = "import gc; gc.collect()\n";
+ vtkPythonInterpreter::RunSimpleString(code);
+ }
++ VTK_PY_GIL_RELEASE
+ }
+
+ PyObject* GetInteractiveConsole()
+@@ -65,6 +67,7 @@
+
+ vtkPythonInterpreter::Initialize();
+
++ VTK_PY_GIL_ENSURE
+ // set up the code.InteractiveConsole instance that we'll use.
+ const char* code = "import code\n"
+ "__vtkConsoleLocals={'__name__':'__vtkconsole__','__doc__':None}\n"
+@@ -83,6 +86,7 @@
+ {
+ vtkGenericWarningMacro(
+ "Failed to locate the InteractiveConsole/InteractiveConsoleLocals object.");
++ VTK_PY_GIL_RELEASE
+ return NULL;
+ }
+ Py_INCREF(this->InteractiveConsole);
+@@ -105,7 +109,7 @@
+ PySys_SetObject(const_cast<char*>("ps2"), ps2 = PyString_FromString("... "));
+ Py_XDECREF(ps2);
+ }
+-
++ VTK_PY_GIL_RELEASE
+ return this->InteractiveConsole;
+ }
+ };
+@@ -167,6 +171,7 @@
+ i++;
+ }
+
++ VTK_PY_GIL_ENSURE
+ bool ret_value = false;
+ PyObject *res = PyObject_CallMethod(console,
+ const_cast<char*>("push"), const_cast<char*>("z"), buffer.c_str());
+@@ -179,6 +184,7 @@
+ }
+ Py_DECREF(res);
+ }
++ VTK_PY_GIL_RELEASE
+ return ret_value;
+ }
+
+@@ -190,12 +196,14 @@
+
+ this->Internals->GetInteractiveConsole(); //ensure the console is initialized
+
++ VTK_PY_GIL_ENSURE
+ PyObject* context = this->Internals->GetInteractiveConsoleLocalsPyObject();
+ PyObject* result = PyRun_String(const_cast<char*>(script), Py_file_input, context, context);
+
+ if (result == NULL)
+ {
+ PyErr_Print();
++ VTK_PY_GIL_RELEASE
+ return -1;
+ }
+
+@@ -204,6 +212,7 @@
+ {
+ PyErr_Clear();
+ }
++ VTK_PY_GIL_RELEASE
+ return 0;
+ }
+
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/VTK/Utilities/PythonInterpreter/vtkPythonInterpreter.cxx ParaView-4.2.0_SRC.new/VTK/Utilities/PythonInterpreter/vtkPythonInterpreter.cxx
+--- ParaView-4.2.0_SRC/VTK/Utilities/PythonInterpreter/vtkPythonInterpreter.cxx 2014-09-23 18:47:11.000000000 +0400
++++ ParaView-4.2.0_SRC.new/VTK/Utilities/PythonInterpreter/vtkPythonInterpreter.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -60,10 +60,12 @@
+
+ inline void vtkPrependPythonPath(const char* pathtoadd)
+ {
++ VTK_PY_GIL_ENSURE
+ PyObject* path = PySys_GetObject(const_cast<char*>("path"));
+ PyObject* newpath = PyString_FromString(pathtoadd);
+ PyList_Insert(path, 0, newpath);
+ Py_DECREF(newpath);
++ VTK_PY_GIL_RELEASE
+ }
+ }
+
+@@ -107,7 +109,6 @@
+ //----------------------------------------------------------------------------
+ bool vtkPythonInterpreter::Initialize(int initsigs /*=0*/)
+ {
+- vtkPythonInterpreter::InitializedOnce = true;
+ if (Py_IsInitialized() == 0)
+ {
+ #if (VTK_PYTHON_MAJOR_VERSION > 2) ||\
+@@ -117,11 +118,26 @@
+ (void)initsigs;
+ Py_Initialize();
+ #endif
+-
+ #ifdef SIGINT
+ // Put default SIGINT handler back after Py_Initialize/Py_InitializeEx.
+ signal(SIGINT, SIG_DFL);
+ #endif
++ }
++
++ if (! vtkPythonInterpreter::InitializedOnce)
++ {
++#ifndef VTK_NO_PYTHON_THREADS
++ int threadInit = PyEval_ThreadsInitialized();
++ PyEval_InitThreads(); // safe to call this multiple time
++#endif
++ // At this point we have GIL, or we are mono-thread.
++ // Access to the static below is safe:
++ vtkPythonInterpreter::InitializedOnce = true;
++
++#ifndef VTK_NO_PYTHON_THREADS
++ if(!threadInit)
++ PyEval_SaveThread(); // release GIL
++#endif
+ // HACK: Calling PyRun_SimpleString for the first time for some reason results in
+ // a "\n" message being generated which is causing the error dialog to
+ // popup. So we flush that message out of the system before setting up the
+@@ -134,15 +150,17 @@
+ vtkPythonStdStreamCaptureHelper* wrapperErr =
+ NewPythonStdStreamCaptureHelper(true);
+
+- // Redirect Python's stdout and stderr and stdin
+- PySys_SetObject(const_cast<char*>("stdout"),
++ // Redirect Python's stdout and stderr and stdin - GIL protected operation
++ VTK_PY_GIL_ENSURE
++ int ret1 = PySys_SetObject(const_cast<char*>("stdout"),
+ reinterpret_cast<PyObject*>(wrapperOut));
+- PySys_SetObject(const_cast<char*>("stderr"),
++ int ret2 = PySys_SetObject(const_cast<char*>("stderr"),
+ reinterpret_cast<PyObject*>(wrapperErr));
+- PySys_SetObject(const_cast<char*>("stdin"),
++ int ret3 = PySys_SetObject(const_cast<char*>("stdin"),
+ reinterpret_cast<PyObject*>(wrapperOut));
+ Py_DECREF(wrapperOut);
+ Py_DECREF(wrapperErr);
++ VTK_PY_GIL_RELEASE
+
+ for (size_t cc=0; cc < PythonPaths.size(); cc++)
+ {
+@@ -162,6 +180,7 @@
+ if (Py_IsInitialized() != 0)
+ {
+ NotifyInterpreters(vtkCommand::ExitEvent);
++ VTK_PY_GIL_ENSURE
+ Py_Finalize();
+ }
+ }
+@@ -213,6 +232,7 @@
+ }
+
+ //----------------------------------------------------------------------------
++// [ABN] not thread safe for now - only used by pvpython?
+ int vtkPythonInterpreter::PyMain(int argc, char** argv)
+ {
+ if (!vtkPythonInterpreter::InitializedOnce && Py_IsInitialized() == 0 &&
+@@ -235,7 +255,9 @@
+ buffer.erase(std::remove(buffer.begin(), buffer.end(), '\r'), buffer.end());
+
+ // The cast is necessary because PyRun_SimpleString() hasn't always been const-correct
++ VTK_PY_GIL_ENSURE
+ PyRun_SimpleString(const_cast<char*>(buffer.c_str()));
++ VTK_PY_GIL_RELEASE
+ }
+
+ //----------------------------------------------------------------------------
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/VTK/Wrapping/PythonCore/vtkPythonCommand.cxx ParaView-4.2.0_SRC.new/VTK/Wrapping/PythonCore/vtkPythonCommand.cxx
+--- ParaView-4.2.0_SRC/VTK/Wrapping/PythonCore/vtkPythonCommand.cxx 2014-09-23 18:47:11.000000000 +0400
++++ ParaView-4.2.0_SRC.new/VTK/Wrapping/PythonCore/vtkPythonCommand.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -30,14 +30,18 @@
+ vtkPythonUtil::UnRegisterPythonCommand(this);
+ if (this->obj && Py_IsInitialized())
+ {
++ VTK_PY_GIL_ENSURE
+ Py_DECREF(this->obj);
++ VTK_PY_GIL_RELEASE
+ }
+ this->obj = NULL;
+ }
+
+ void vtkPythonCommand::SetObject(PyObject *o)
+ {
++ VTK_PY_GIL_ENSURE
+ Py_INCREF(o);
++ VTK_PY_GIL_RELEASE
+ this->obj = o;
+ }
+
+@@ -92,11 +96,11 @@
+ // If a threadstate has been set using vtkPythonCommand::SetThreadState,
+ // then swap it in here. See the email to vtk-developers@vtk.org from
+ // June 18, 2009 with subject "Py_NewInterpreter and vtkPythonCallback issue"
+- PyThreadState* prevThreadState = NULL;
+- if (this->ThreadState)
+- {
+- prevThreadState = PyThreadState_Swap(this->ThreadState);
+- }
++// PyThreadState* prevThreadState = NULL;
++// if (this->ThreadState)
++// {
++// prevThreadState = PyThreadState_Swap(this->ThreadState);
++// }
+
+ PyObject * obj2 = NULL;
+ if (ptr && ptr->GetReferenceCount() > 0)
+@@ -237,10 +241,10 @@
+ }
+
+ // If we did the swap near the top of this function then swap back now.
+- if (this->ThreadState)
+- {
+- PyThreadState_Swap(prevThreadState);
+- }
++// if (this->ThreadState)
++// {
++// PyThreadState_Swap(prevThreadState);
++// }
+
+ #ifndef VTK_NO_PYTHON_THREADS
+ #if (PY_MAJOR_VERSION > 2) || \
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/VTK/Wrapping/PythonCore/vtkSmartPyObject.cxx ParaView-4.2.0_SRC.new/VTK/Wrapping/PythonCore/vtkSmartPyObject.cxx
+--- ParaView-4.2.0_SRC/VTK/Wrapping/PythonCore/vtkSmartPyObject.cxx 2014-09-23 18:47:11.000000000 +0400
++++ ParaView-4.2.0_SRC.new/VTK/Wrapping/PythonCore/vtkSmartPyObject.cxx 2014-11-18 15:23:10.000000000 +0300
+@@ -30,37 +30,52 @@
+ vtkSmartPyObject::vtkSmartPyObject(const vtkSmartPyObject &other) :
+ Object(other.Object)
+ {
++ VTK_PY_GIL_ENSURE
+ Py_XINCREF(this->Object);
++ VTK_PY_GIL_RELEASE
+ }
+
+ //--------------------------------------------------------------------
+ vtkSmartPyObject::~vtkSmartPyObject()
+ {
+- Py_XDECREF(this->Object);
++ if (Py_IsInitialized())
++ {
++ VTK_PY_GIL_ENSURE
++ Py_XDECREF(this->Object);
++ VTK_PY_GIL_RELEASE
++ }
++ else
++ Py_XDECREF(this->Object);
+ }
+
+ //--------------------------------------------------------------------
+ vtkSmartPyObject &vtkSmartPyObject::operator=(const vtkSmartPyObject &other)
+ {
++ VTK_PY_GIL_ENSURE
+ Py_XDECREF(this->Object);
+ this->Object = other.Object;
+ Py_XINCREF(this->Object);
++ VTK_PY_GIL_RELEASE
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ vtkSmartPyObject &vtkSmartPyObject::operator=(PyObject *obj)
+ {
++ VTK_PY_GIL_ENSURE
+ Py_XDECREF(this->Object);
+ this->Object = obj;
+ Py_XINCREF(this->Object);
++ VTK_PY_GIL_RELEASE
+ return *this;
+ }
+
+ //--------------------------------------------------------------------
+ void vtkSmartPyObject::TakeReference(PyObject *obj)
+ {
++ VTK_PY_GIL_ENSURE
+ Py_XDECREF(this->Object);
++ VTK_PY_GIL_RELEASE
+ this->Object = obj;
+ }
+
+@@ -99,6 +114,8 @@
+ //--------------------------------------------------------------------
+ PyObject *vtkSmartPyObject::GetAndIncreaseReferenceCount()
+ {
++ VTK_PY_GIL_ENSURE
+ Py_XINCREF(this->Object);
++ VTK_PY_GIL_RELEASE
+ return this->Object;
+ }
+diff -Naur --exclude=CVS --exclude=.git ParaView-4.2.0_SRC/Wrapping/Python/paraview/servermanager.py ParaView-4.2.0_SRC.new/Wrapping/Python/paraview/servermanager.py
+--- ParaView-4.2.0_SRC/Wrapping/Python/paraview/servermanager.py 2014-09-23 18:46:44.000000000 +0400
++++ ParaView-4.2.0_SRC.new/Wrapping/Python/paraview/servermanager.py 2014-11-18 15:23:10.000000000 +0300
+@@ -1092,7 +1092,7 @@
+ property = self.SMProperty
+ nElems = property.GetNumberOfElements()
+ if nElems%2 != 0:
+- raise ValueError, "The SMProperty with XML label '%s' has a size that is not a multiple of 2." % property.GetXMLLabel()
++ nElems -= 1
+ self.__arrays = []
+ for i in range(0, nElems, 2):
+ if self.GetElement(i+1) != '0':