mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-04 17:10:47 +00:00
Wrap BlockInvoke() calls with a helper function that releases the GIL
* This means that if we BlockInvoke a python callback, we don't end up in a deadlock where we're holding the GIL during script execution but also waiting on the renderer running (which is trying to acquire the GIL before calling the callback).
This commit is contained in:
@@ -24,6 +24,9 @@ CONTAINER_TYPEMAPS(QMap &)
|
||||
CONTAINER_TYPEMAPS(QMap *)
|
||||
CONTAINER_TYPEMAPS(QMap)
|
||||
|
||||
// need to ignore the original function and add a helper that releases the python GIL while calling
|
||||
%ignore IRenderManager::BlockInvoke;
|
||||
|
||||
// ignore these functions as we don't map QVariantMap to/from python
|
||||
%ignore EnvironmentModification::toJSON;
|
||||
%ignore EnvironmentModification::fromJSON;
|
||||
@@ -53,6 +56,17 @@ CONTAINER_TYPEMAPS(QMap)
|
||||
%include "Code/Interface/PersistantConfig.h"
|
||||
%include "Code/Interface/RemoteHost.h"
|
||||
|
||||
// unignore the function from above
|
||||
%rename("%s") IRenderManager::BlockInvoke;
|
||||
|
||||
%extend IRenderManager {
|
||||
void BlockInvoke(InvokeMethod m) {
|
||||
Py_BEGIN_ALLOW_THREADS
|
||||
$self->BlockInvoke(m);
|
||||
Py_END_ALLOW_THREADS
|
||||
}
|
||||
};
|
||||
|
||||
%init %{
|
||||
PyDateTime_IMPORT;
|
||||
%}
|
||||
|
||||
Reference in New Issue
Block a user