diff CodeAnalysis/FunctionBody.mustache @ 179:f49864df6f1f java-code-model

trying Py_BEGIN_ALLOW_THREADS
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 27 Jun 2024 21:53:03 +0200
parents 8382c7dea471
children f34f3a149c22
line wrap: on
line diff
--- a/CodeAnalysis/FunctionBody.mustache	Thu Jun 27 18:51:36 2024 +0200
+++ b/CodeAnalysis/FunctionBody.mustache	Thu Jun 27 21:53:03 2024 +0200
@@ -17,12 +17,16 @@
   }
 {{/check_object_type}}{{/args}}
 {{#return_long}}
+  {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
   long value = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
+  {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
   {{#args}}{{release}}{{/args}}
   return PyLong_FromLong(value);
 {{/return_long}}
 {{#return_static_string}}
+  {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
   const char* s = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
+  {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
   {{#args}}{{release}}{{/args}}
   if (s == NULL)
   {
@@ -35,8 +39,10 @@
   }
 {{/return_static_string}}
 {{#return_dynamic_string}}
+  {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
   OrthancPlugins::OrthancString s;
   s.Assign({{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}}));
+  {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
   {{#args}}{{release}}{{/args}}
   if (s.GetContent() == NULL)
   {
@@ -49,14 +55,18 @@
   }
 {{/return_dynamic_string}}
 {{#return_void}}
+  {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
   {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
+  {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
   {{#args}}{{release}}{{/args}}
 
   Py_INCREF(Py_None);
   return Py_None;
 {{/return_void}}
 {{#return_error}}
+  {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
   OrthancPluginErrorCode code = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
+  {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
   {{#args}}{{release}}{{/args}}
 
   if (code == OrthancPluginErrorCode_Success)
@@ -72,7 +82,9 @@
 {{/return_error}}
 {{#return_object}}
   // This is the case of a constructor
+  {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
   {{return_object}}* obj = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
+  {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
   {{#args}}{{release}}{{/args}}
   if (obj == NULL)
   {
@@ -88,8 +100,10 @@
   }
 {{/return_object}}
 {{#return_bytes}}
+  {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
   OrthancPlugins::MemoryBuffer buffer;
   OrthancPluginErrorCode code = {{c_function}}(OrthancPlugins::GetGlobalContext(), *buffer{{self}}{{call_args}});
+  {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
   {{#args}}{{release}}{{/args}}
   if (code == OrthancPluginErrorCode_Success)
   {
@@ -102,7 +116,9 @@
   }
 {{/return_bytes}}
 {{#return_enumeration}}
+  {{#allow_threads}}PyThreadState *_save = PyEval_SaveThread();{{/allow_threads}}
   {{return_enumeration}} value = {{c_function}}(OrthancPlugins::GetGlobalContext(){{self}}{{call_args}});
+  {{#allow_threads}}PyEval_RestoreThread(_save);{{/allow_threads}}
   {{#args}}{{release}}{{/args}}
   return PyLong_FromLong(value);
 {{/return_enumeration}}