diff options
Diffstat (limited to 'mpm')
| -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> | 
