This is an automated email from the ASF dual-hosted git repository.
pefernan pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new 2971253843 [incubator-kie-issues-2000] Memory leak in
LightWorkItemManager.workItems (#3954)
2971253843 is described below
commit 2971253843fedd6489e599d7823d1b0edf11e6ed
Author: Enrique <[email protected]>
AuthorDate: Fri Jun 13 16:48:02 2025 +0200
[incubator-kie-issues-2000] Memory leak in LightWorkItemManager.workItems
(#3954)
* [incubator-kie-issues-2000] Memory leak in LightWorkItemManager.workItems
* fix internalunloadprocessstate
* remove process instance from in memory manager
* only clean up during error and buble the error
---
.../process/impl/AbstractProcessInstance.java | 38 +++++++++++++++-------
1 file changed, 27 insertions(+), 11 deletions(-)
diff --git
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
index 13c9aac1c5..edfff66d24 100644
---
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
+++
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
@@ -239,19 +239,23 @@ public abstract class AbstractProcessInstance<T extends
Model> implements Proces
processError = buildProcessError();
}
if (processInstance.getKnowledgeRuntime() != null) {
- processInstance.getMetaData().remove(KOGITO_PROCESS_INSTANCE);
disconnect();
}
internalUnloadState();
}
public void internalUnloadState() {
- // we left the instance in read only mode once it is completed
- if (status == STATE_COMPLETED || status == STATE_ABORTED) {
- this.rt = null;
- } else if (status != STATE_PENDING) {
- // already persisted. PENDING means that it has not started yet
- processInstance = null;
+ switch (status) {
+ case STATE_COMPLETED, STATE_ABORTED:
+ // we left the instance in read only mode once it is completed
+ this.rt = null;
+ break;
+ case STATE_PENDING:
+ break;
+ default:
+ // already persisted. PENDING means that it has not started yet
+ processInstance = null;
+ break;
}
}
@@ -261,7 +265,7 @@ public abstract class AbstractProcessInstance<T extends
Model> implements Proces
}
LOG.debug("disconnect process instance state {}",
processInstance.getId());
processInstance.disconnect();
- processInstance.setMetaData(KOGITO_PROCESS_INSTANCE, null);
+ processInstance.getMetaData().remove(KOGITO_PROCESS_INSTANCE);
}
private void setCorrelationKey(String businessKey) {
@@ -575,7 +579,6 @@ public abstract class AbstractProcessInstance<T extends
Model> implements Proces
return processInstanceLockStrategy.executeOperation(id, () -> {
WorkflowProcessInstanceImpl workflowProcessInstance =
internalLoadProcessInstanceState();
R outcome = execution.apply(workflowProcessInstance);
- syncWorkflowInstanceState(workflowProcessInstance);
internalUnloadProcessInstanceState();
return outcome;
});
@@ -587,8 +590,21 @@ public abstract class AbstractProcessInstance<T extends
Model> implements Proces
if (isProcessInstanceConnected()) {
getProcessRuntime().getProcessInstanceManager().addProcessInstance(workflowProcessInstance);
}
- R outcome = execution.apply(workflowProcessInstance);
- syncWorkflowInstanceState(workflowProcessInstance);
+ R outcome = null;
+ try {
+ outcome = execution.apply(workflowProcessInstance);
+ } catch (Throwable th) {
+ // clean up after non expected error
+ if (isProcessInstanceConnected()) {
+
getProcessRuntime().getProcessInstanceManager().removeProcessInstance(workflowProcessInstance);
+ }
+ if (workflowProcessInstance.getKnowledgeRuntime() != null) {
+ disconnect();
+ }
+ internalUnloadState();
+ throw th;
+ }
+
if (isProcessInstanceConnected()) {
syncPersistence(workflowProcessInstance);
getProcessRuntime().getProcessInstanceManager().removeProcessInstance(workflowProcessInstance);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]