Ignition 8.1.49
Project A > Project B > Project C
Each time I made a script change in project A, Tag expression script using runscript are broken and probably other side effect in script manager.
I need to restart the gateway.
The script modified in project A contain lots of global dictionnary with settings.
The script modified in Project A is broadly used in script from project B and C.
I suspect it is the race condition issue on loading script ?
Nothing suspect in thread dump or blocked thread.
org.python.core.PyException: TypeError: unhashable type: 'dict'
at org.python.core.Py.TypeError(Py.java:234)
at org.python.core.PyDictionary.dict___hash__(PyDictionary.java:828)
at org.python.core.PyDictionary.hashCode(PyDictionary.java:810)
at java.base/java.util.concurrent.ConcurrentHashMap.get(Unknown Source)
at org.python.core.PyStringMap.__finditem__(PyStringMap.java:129)
at com.inductiveautomation.ignition.common.script.ScriptManager.lambda$clearProjectScriptModules$6(ScriptManager.java:661)
at java.base/java.lang.Iterable.forEach(Unknown Source)
at com.inductiveautomation.ignition.common.script.ScriptManager.clearProjectScriptModules(ScriptManager.java:660)
at com.inductiveautomation.ignition.common.script.ScriptManager.shutdown(ScriptManager.java:167)
at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle.createScriptConfig(ProjectScriptLifecycle.java:279)
at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle.startupScriptConfig(ProjectScriptLifecycle.java:235)
at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle.restartScriptConfig(ProjectScriptLifecycle.java:231)
at com.inductiveautomation.ignition.gateway.project.ProjectScriptLifecycle.onResourcesModified(ProjectScriptLifecycle.java:733)
at com.inductiveautomation.ignition.gateway.project.ProjectLifecycle$LifecycleResourceListener.resourcesModified(ProjectLifecycle.java:176)
at com.inductiveautomation.ignition.common.project.AbstractProject.notifyResourceListeners(AbstractProject.java:351)
at com.inductiveautomation.ignition.common.project.AbstractProject.updateEffectiveState(AbstractProject.java:153)
at com.inductiveautomation.ignition.common.project.RuntimeProject.applyChange(RuntimeProject.java:274)
at com.inductiveautomation.ignition.gateway.project.ProjectLifecycleFactory$1.lambda$updateOrStartAffectedProjects$5(ProjectLifecycleFactory.java:185)
at java.base/java.util.ArrayList.forEach(Unknown Source)
at com.inductiveautomation.ignition.gateway.project.ProjectLifecycleFactory$1.updateOrStartAffectedProjects(ProjectLifecycleFactory.java:165)
at com.inductiveautomation.ignition.gateway.project.ProjectLifecycleFactory$1.projectUpdated(ProjectLifecycleFactory.java:143)
at com.inductiveautomation.ignition.gateway.project.BaseProjectManager.doProjectUpdatedNotification(BaseProjectManager.java:1055)
at com.inductiveautomation.ignition.gateway.project.BaseProjectManager.lambda$fireProjectUpdated$25(BaseProjectManager.java:1005)
at com.inductiveautomation.ignition.gateway.project.BaseProjectManager.lambda$submitToQueue$22(BaseProjectManager.java:983)
at com.inductiveautomation.ignition.common.util.ExecutionQueue$PollAndExecute.run(ExecutionQueue.java:239)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)