From bf18450d9ac5e898a4db1b1d13ed84787442bcf0 Mon Sep 17 00:00:00 2001 From: Ovidiu MIRCESCU Date: Tue, 8 Mar 2022 16:23:05 +0100 Subject: [PATCH] Python unserialize not thread safe. --- src/Basics/CMakeLists.txt | 1 + src/Basics/PythonCppUtils.cxx | 22 ++++++++++++++++++++++ src/Basics/PythonCppUtils.hxx | 6 +++++- 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/Basics/PythonCppUtils.cxx diff --git a/src/Basics/CMakeLists.txt b/src/Basics/CMakeLists.txt index 2894a235f..545a46deb 100644 --- a/src/Basics/CMakeLists.txt +++ b/src/Basics/CMakeLists.txt @@ -34,6 +34,7 @@ SET(SALOMEBasics_SOURCES Basics_Utils.hxx Basics_DirUtils.hxx KernelBasis.cxx + PythonCppUtils.cxx ) ADD_LIBRARY(SALOMEBasics ${SALOMEBasics_SOURCES}) diff --git a/src/Basics/PythonCppUtils.cxx b/src/Basics/PythonCppUtils.cxx new file mode 100644 index 000000000..82633da9a --- /dev/null +++ b/src/Basics/PythonCppUtils.cxx @@ -0,0 +1,22 @@ +// Copyright (C) 2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "PythonCppUtils.hxx" + +std::mutex AutoGIL::global_mutex; diff --git a/src/Basics/PythonCppUtils.hxx b/src/Basics/PythonCppUtils.hxx index dd724c153..9995db8ef 100644 --- a/src/Basics/PythonCppUtils.hxx +++ b/src/Basics/PythonCppUtils.hxx @@ -20,14 +20,18 @@ #pragma once #include +#include class AutoGIL { public: - AutoGIL():_gstate(PyGILState_Ensure()) { } + AutoGIL():_lock(global_mutex), _gstate() + { _gstate = PyGILState_Ensure(); } ~AutoGIL() { PyGILState_Release(_gstate); } private: + std::unique_lock _lock; PyGILState_STATE _gstate; + static std::mutex global_mutex; }; class AutoPyRef -- 2.39.2