aboutsummaryrefslogtreecommitdiffstats
path: root/mpm/python
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2018-02-13 16:37:37 -0800
committerMartin Braun <martin.braun@ettus.com>2018-02-13 19:58:32 -0800
commitd58cadb8b090b8bb4b083a103903800bdb7716df (patch)
tree4a21ee0022a7b84f297e84710394ac80a7e1bee8 /mpm/python
parent8c4894534ecec3f0d51b9fff9e0605b40ba2ab6c (diff)
downloaduhd-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.cpp30
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>