Fix shutdown

This commit is contained in:
Michael Zanetti 2020-07-15 00:06:34 +02:00
parent b870140608
commit 78e37f0d87
3 changed files with 15 additions and 3 deletions

View File

@ -274,7 +274,7 @@ PythonIntegrationPlugin::PythonIntegrationPlugin(QObject *parent) : IntegrationP
PythonIntegrationPlugin::~PythonIntegrationPlugin()
{
PyGILState_Ensure();
PyGILState_STATE s = PyGILState_Ensure();
while (!m_runningThreads.isEmpty()) {
PyObject *loop = m_runningThreads.keys().first();
@ -283,7 +283,7 @@ PythonIntegrationPlugin::~PythonIntegrationPlugin()
}
Py_XDECREF(s_plugins.take(this));
Py_FinalizeEx();
PyGILState_Release(s);
}
void PythonIntegrationPlugin::initPython()
@ -302,6 +302,13 @@ void PythonIntegrationPlugin::initPython()
s_mainThread = PyEval_SaveThread();
}
void PythonIntegrationPlugin::deinitPython()
{
PyEval_RestoreThread(s_mainThread);
Py_FinalizeEx();
}
bool PythonIntegrationPlugin::loadScript(const QString &scriptFile)
{
QFileInfo fi(scriptFile);

View File

@ -22,6 +22,7 @@ public:
~PythonIntegrationPlugin();
static void initPython();
static void deinitPython();
bool loadScript(const QString &scriptFile);

View File

@ -101,6 +101,7 @@ ThingManagerImplementation::ThingManagerImplementation(HardwareManager *hardware
ThingManagerImplementation::~ThingManagerImplementation()
{
delete m_translator;
foreach (Thing *thing, m_configuredThings) {
@ -116,6 +117,8 @@ ThingManagerImplementation::~ThingManagerImplementation()
qCDebug(dcThingManager()) << "Not deleting plugin" << plugin->pluginName();
}
}
PythonIntegrationPlugin::deinitPython();
}
QStringList ThingManagerImplementation::pluginSearchDirs()
@ -1951,7 +1954,7 @@ void ThingManagerImplementation::loadThingStates(Thing *thing)
ThingClass thingClass = m_supportedThings.value(thing->thingClassId());
foreach (const StateType &stateType, thingClass.stateTypes()) {
if (stateType.cached()) {
QVariant value(stateType.defaultValue());
QVariant value = stateType.defaultValue();
if (settings.contains(stateType.id().toString())) {
value = settings.value(stateType.id().toString());
@ -1963,6 +1966,7 @@ void ThingManagerImplementation::loadThingStates(Thing *thing)
}
value.convert(stateType.type());
thing->setStateValue(stateType.id(), value);
qWarning() << "**** loaded state" << stateType.name() << value;
} else {
thing->setStateValue(stateType.id(), stateType.defaultValue());
}