Ticket #3407 (closed: fixed)
Memory Leak: when python algorithms fail
| Reported by: | Nick Draper | Owned by: | Martyn Gigg |
|---|---|---|---|
| Priority: | critical | Milestone: | Release 2.5 |
| Component: | Mantid | Keywords: | |
| Cc: | Blocked By: | ||
| Blocking: | Tester: | Peter Peterson |
Description (last modified by Martyn Gigg) (diff)
If a python algorithm fails it appears that it is held in memory together with any shared pointer it holds.
Test case:
from MantidFramework import *
from mantidsimple import *
class SimplePowderDiffraction2(PythonAlgorithm):
def category(self):
return "Examples"
def name(self):
return "SimplePowderDiffraction"
def version(self):
return 2
def PyInit(self):
# Input file
self.declareFileProperty("Filename", "", FileAction.Load)
#cal file
self.declareFileProperty("CalFile", "", FileAction.Load)
# Output workspace to put the transmission histo into
self.declareWorkspaceProperty("OutputWorkspace", "", Direction.Output)
def PyExec(self):
file = self.getProperty("Filename")
calFile = self.getProperty("CalFile")
tempWorkspace = "__tmp_SimplePowderDiffraction"
#Load and Load RAW do now work with executeSubAlgorithms
Load(file,tempWorkspace)
tmpWs = mtd[tempWorkspace]
a = self.executeSubAlg(AlignDetectors, tmpWs, tmpWs, CalibrationFile=calFile)
tmpWs = a._getWorkspaceProperty("OutputWorkspace")
mtd.sendLogMessage(str(type(tmpWs)))
mtd.sendLogMessage(Error)
a = self.executeSubAlg(DiffractionFocussing, tmpWs,"b", GroupingFileName=calFile)
wspace = a._getWorkspaceProperty("OutputWorkspace")
self.setProperty("OutputWorkspace", wspace)
#need to delete the temp workspace names
mtd.deleteWorkspace(tempWorkspace)
#############################################################################################
mtd.registerPyAlgorithm(SimplePowderDiffraction2())
Change History
comment:1 Changed 9 years ago by Martyn Gigg
- Status changed from new to verify
- Resolution set to fixed
comment:2 Changed 9 years ago by Martyn Gigg
Note to tester: When the error is raised it will look as if there are no workspaces present but in fact the workspace used is hidden with this name '__tmp_SimplePowderDiffraction'. After the bugfix the memory should be freed when DeleteWorkspace('__tmp_SimplePowderDiffraction') is called. Before the bugfix calling delete had no effect.
comment:3 Changed 9 years ago by Janik Zikovsky
- Status changed from verify to verifying
- Tester set to Janik Zikovsky
comment:4 Changed 9 years ago by Janik Zikovsky
- Status changed from verifying to verify
- Tester Janik Zikovsky deleted
comment:5 Changed 9 years ago by Nick Draper
- Status changed from verify to verifying
- Tester set to Nick Draper
comment:6 Changed 9 years ago by Nick Draper
- Priority changed from major to critical
- Status changed from verifying to reopened
- Resolution fixed deleted
- Milestone changed from Iteration 30 to Iteration 31
still leaks on the first run, subsequent runs do not leak.
Error in execution of algorithm SimplePowderDiffraction: Python error: global name 'Error' is not defined at line 33 in '<input>'
reopen to next iteration
comment:8 Changed 9 years ago by Nick Draper
- Milestone changed from Iteration 32 to Iteration 33
Moved to iteration 33 at iteration 32 code freeze
comment:9 Changed 8 years ago by Nick Draper
- Milestone changed from Release 2.1 to Release 2.2
Moved at end of release 2.1
comment:10 Changed 8 years ago by Nick Draper
- Milestone changed from Release 2.2 to Release 2.3
Moved at the end of release 2.2
comment:14 Changed 8 years ago by Martyn Gigg
- Status changed from accepted to verify
- Resolution set to fixed
- Description modified (diff)
Tested this again after fixing #6779 and it seems like the leak as gone away.
Tester: Take note of comment 2 and use the algorithm in the main description to test.
The algorithm loads a workspace into a hidden workspace name and then an error occurs. The workspace is still in memory and clicking 'File->Clear All Memory' should now remove the workspace from memory properly.
comment:15 Changed 8 years ago by Peter Peterson
- Status changed from verify to verifying
- Tester changed from Nick Draper to Peter Peterson
comment:16 Changed 8 years ago by Peter Peterson
- Status changed from verifying to closed
This defect no longer exists. Very likely due to #6779 which have been on master for the better part of a week.
comment:17 Changed 5 years ago by Stuart Campbell
This ticket has been transferred to github issue 4254

In [13962]: