diff options
author | Martin Braun <martin.braun@ettus.com> | 2018-02-13 16:37:37 -0800 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2018-02-13 19:58:32 -0800 |
commit | d58cadb8b090b8bb4b083a103903800bdb7716df (patch) | |
tree | 4a21ee0022a7b84f297e84710394ac80a7e1bee8 /mpm/python | |
parent | 8c4894534ecec3f0d51b9fff9e0605b40ba2ab6c (diff) | |
download | uhd-d58cadb8b090b8bb4b083a103903800bdb7716df.tar.gz uhd-d58cadb8b090b8bb4b083a103903800bdb7716df.tar.bz2 uhd-d58cadb8b090b8bb4b083a103903800bdb7716df.zip |
mpm: Add RAII style GIL release mechanism to Python library
Note: This commit does not actually apply the GIL release, it only
provides the class to do so.
Diffstat (limited to 'mpm/python')
-rw-r--r-- | mpm/python/pyusrp_periphs.cpp | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/mpm/python/pyusrp_periphs.cpp b/mpm/python/pyusrp_periphs.cpp index 78f55351a..520590773 100644 --- a/mpm/python/pyusrp_periphs.cpp +++ b/mpm/python/pyusrp_periphs.cpp @@ -1,7 +1,7 @@ // -// Copyright 2017 Ettus Research, National Instruments Company +// Copyright 2017 Ettus Research, a National Instruments Company // -// SPDX-License-Identifier: GPL-3.0 +// SPDX-License-Identifier: GPL-3.0+ // // include hackery to only include boost python and define the macro here @@ -14,6 +14,32 @@ bp::scope().attr(module) = py_module; \ bp::scope io_scope = py_module; +//! RAII-style GIL release method +// +// To release the GIL using this method, simply instantiate this class in the +// scope that needs to release the GIL. +// +// Note that using this class assumes that threads have already been +// initialized. See also https://docs.python.org/3.5/c-api/init.html for more +// documentation on Python initialization and threads. +class scoped_gil_release +{ +public: + inline scoped_gil_release() + { + _thread_state = PyEval_SaveThread(); + } + + inline ~scoped_gil_release() + { + PyEval_RestoreThread(_thread_state); + _thread_state = nullptr; + } + +private: + PyThreadState* _thread_state; +}; + //#include "types.hpp" #include "converters.hpp" #include <mpm/xbar_iface.hpp> |