[SYSTEMDS-2594] Fix bufferpool leak in mvvar instructions, part 2
This additional patch fixes edge cases of the variable cleanup in mvvar
instructions: (1) for lists of matrices/frames, and (2) scenarios where
the src and target are the same object.
diff --git a/src/main/java/org/apache/sysds/runtime/instructions/cp/VariableCPInstruction.java b/src/main/java/org/apache/sysds/runtime/instructions/cp/VariableCPInstruction.java
index 0e2b8ad..6cc83a0 100644
--- a/src/main/java/org/apache/sysds/runtime/instructions/cp/VariableCPInstruction.java
+++ b/src/main/java/org/apache/sysds/runtime/instructions/cp/VariableCPInstruction.java
@@ -682,9 +682,11 @@
// remove existing variable bound to target name and
// cleanup matrix/frame/list data if necessary
- Data tgt = ec.removeVariable(getInput2().getName());
- if( tgt != null)
- ec.cleanupDataObject(tgt);
+ if( srcData.getDataType().isMatrix() || srcData.getDataType().isFrame() ) {
+ Data tgtData = ec.removeVariable(getInput2().getName());
+ if( tgtData != null && srcData != tgtData )
+ ec.cleanupDataObject(tgtData);
+ }
// do the actual move
ec.setVariable(getInput2().getName(), srcData);
diff --git a/src/test/java/org/apache/sysds/test/AutomatedTestBase.java b/src/test/java/org/apache/sysds/test/AutomatedTestBase.java
index 9cee894..4647efd 100644
--- a/src/test/java/org/apache/sysds/test/AutomatedTestBase.java
+++ b/src/test/java/org/apache/sysds/test/AutomatedTestBase.java
@@ -1196,6 +1196,8 @@
fail("expected exception which has not been raised: " + expectedException);
}
catch(Exception e) {
+ if( !outputBuffering )
+ e.printStackTrace();
if(errMessage != null && !errMessage.equals("")) {
boolean result = rCompareException(exceptionExpected, errMessage, e, false);
if(exceptionExpected && !result) {
diff --git a/src/test/java/org/apache/sysds/test/applications/GLMTest.java b/src/test/java/org/apache/sysds/test/applications/GLMTest.java
index b52d782..ad2f6c4 100644
--- a/src/test/java/org/apache/sysds/test/applications/GLMTest.java
+++ b/src/test/java/org/apache/sysds/test/applications/GLMTest.java
@@ -264,6 +264,7 @@
int expectedNumberOfJobs = -1; // 31;
+ setOutputBuffering(false);
runTest(true, EXCEPTION_NOT_EXPECTED, null, expectedNumberOfJobs);
double max_abs_beta = 0.0;