[cgkit-commits] SF.net SVN: cgkit: [50] maya/trunk/maya_wrapper/src_aux
Brought to you by:
mbaas
From: <mb...@us...> - 2006-09-25 15:55:38
|
Revision: 50 http://svn.sourceforge.net/cgkit/?rev=50&view=rev Author: mbaas Date: 2006-09-25 08:55:32 -0700 (Mon, 25 Sep 2006) Log Message: ----------- Moved the implementation of the class GILGuard into a cpp file. Modified Paths: -------------- maya/trunk/maya_wrapper/src_aux/aux_threading.h Added Paths: ----------- maya/trunk/maya_wrapper/src_aux/aux_threading.cpp Added: maya/trunk/maya_wrapper/src_aux/aux_threading.cpp =================================================================== --- maya/trunk/maya_wrapper/src_aux/aux_threading.cpp (rev 0) +++ maya/trunk/maya_wrapper/src_aux/aux_threading.cpp 2006-09-25 15:55:32 UTC (rev 50) @@ -0,0 +1,86 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Python Computer Graphics Kit. + * + * The Initial Developer of the Original Code is Matthias Baas. + * Portions created by the Initial Developer are Copyright (C) 2006 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * + * ***** END LICENSE BLOCK ***** */ + +#include "aux_threading.h" + +/** + Constructor. +*/ +GILGuard::GILGuard() + : numlocks(0), multi_threaded(false) +{ + // Determine whether multi-threading support is enabled or not + multi_threaded = PyEval_ThreadsInitialized(); +} + +/** + Destructor. + + Releases the GIL if it was acquired. +*/ +GILGuard::~GILGuard() +{ + while (numlocks>0) + release(); +} + +/** + Acquire the GIL. + + This method corresponds to the PyGILState_Ensure() function + from the Python/C API. + It can be called several times but must be matched by an + equivalent number of calls to release(). +*/ +void GILGuard::ensure() +{ + if (!multi_threaded) + return; + + if (numlocks==0) + { + gstate = PyGILState_Ensure(); + } + numlocks++; +} + +/** + Release the GIL. + + This method corresponds to the PyGILState_Release() function + from the Python/C API. + It must be called as many times as ensure() was called. + + If it is called without that ensure() has been called, the + method returns immediately. +*/ +void GILGuard::release() +{ + if (numlocks==0) + return; + + numlocks--; + if (numlocks==0) + { + PyGILState_Release(gstate); + } +} Property changes on: maya/trunk/maya_wrapper/src_aux/aux_threading.cpp ___________________________________________________________________ Name: svn:eol-style + native Modified: maya/trunk/maya_wrapper/src_aux/aux_threading.h =================================================================== --- maya/trunk/maya_wrapper/src_aux/aux_threading.h 2006-09-25 15:54:54 UTC (rev 49) +++ maya/trunk/maya_wrapper/src_aux/aux_threading.h 2006-09-25 15:55:32 UTC (rev 50) @@ -32,8 +32,10 @@ /** - This class should be used for acquiring/releasing the Python GIL. + This class is used for acquiring/releasing the Python GIL. + If multi-threading is not enabled (i.e. PyEval_ThreadsInitialized() + returns false), then any threading API function is not called. */ class GILGuard { @@ -43,65 +45,15 @@ PyGILState_STATE gstate; + /// This flag stored the result of PyEval_ThreadsInitialized() + bool multi_threaded; + public: - /** - Constructor. - */ - GILGuard() - : numlocks(0) - { - } + GILGuard(); + ~GILGuard(); - /** - Destructor. - - Releases the GIL if it was acquired. - */ - ~GILGuard() - { - while (numlocks>0) - release(); - } - - /** - Acquire the GIL. - - This method corresponds to the PyGILState_Ensure() function - from the Python/C API. - It can be called several times but must be matched by an - equivalent number of calls to release(). - */ - void ensure() - { - if (numlocks==0) - { - gstate = PyGILState_Ensure(); - } - numlocks++; - } - - /** - Release the GIL. - - This method corresponds to the PyGILState_Release() function - from the Python/C API. - It must be called as many times as ensure() was called. - - If it is called without that ensure() has been called, the - method returns immediately. - */ - void release() - { - if (numlocks==0) - return; - - numlocks--; - if (numlocks==0) - { - PyGILState_Release(gstate); - } - } - + void ensure(); + void release(); }; #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |