aboutsummaryrefslogtreecommitdiffstats
path: root/mpm/python
diff options
context:
space:
mode:
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>