By binding a method of AxisCanon, the instance becomes
uncollectable. This reformulation still has a small leak
(one Tkinter command binding) but it is not the several
megabytes that leaking an AxisCanon could cause.
---
I should have waited a few minutes longer before firing off the first
patch. I feel like I understand the memory leak better this time, and
prefer this patch to the first one.
src/emc/usr_intf/axis/scripts/axis.py | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/src/emc/usr_intf/axis/scripts/axis.py
b/src/emc/usr_intf/axis/scripts/axis.py
index faa721a..bf26aeb 100644
--- a/src/emc/usr_intf/axis/scripts/axis.py
+++ b/src/emc/usr_intf/axis/scripts/axis.py
@@ -1744,7 +1744,6 @@ class AxisCanon(GLCanon):
self.linecount = linecount
self.progress = progress
self.aborted = False
- root_window.bind_class(".info.progress", "<Escape>", self.do_cancel)
def comment(self, arg):
if arg.startswith("AXIS,"):
@@ -1914,6 +1913,10 @@ def add_recent_file(f):
ap.putpref('recentfiles', recent, repr)
update_recent_menu()
+def cancel_open(event=None):
+ if o.g is not None:
+ o.g.aborted = True
+
loaded_file = None
def open_file_guts(f, filtered=False, addrecent=True):
if addrecent:
@@ -1968,6 +1971,7 @@ def open_file_guts(f, filtered=False, addrecent=True):
progress.nextphase(len(lines))
f = os.path.abspath(f)
o.g = canon = AxisCanon(o, widgets.text, i, progress)
+ root_window.bind_class(".info.progress", "<Escape>", cancel_open)
parameter = inifile.find("RS274NGC", "PARAMETER_FILE")
temp_parameter = os.path.join(tempdir, os.path.basename(parameter))
--
1.6.6.62.g584f3
On Fri, Feb 12, 2010 at 10:44:26AM -0600, Jeff Epler wrote:
> each call to open_file_guts leaks the old GLCanon object, o.g.
> the canon object keeps references to information like the endpoints
> of each line in the program, which can add up to a lot of memory.
>
> it would be ideal to not leak the GLCanon object, but in the meantime
> calling its new .clear() method can reduce the memory from megabytes
> per reload to kilobytes per reload, which greatly reduces the impact
> of the bug.
> ---
> If you're able to test this patch, please let us know whether it worked
> for you. It would be nice to reduce this memory leak to a tolerable
> level for the last 2.3.5 release.
>
> lib/python/rs274/glcanon.py | 6 ++++++
> src/emc/usr_intf/axis/scripts/axis.py | 2 ++
> 2 files changed, 8 insertions(+), 0 deletions(-)
>
> diff --git a/lib/python/rs274/glcanon.py b/lib/python/rs274/glcanon.py
> index 39af454..f571ccc 100644
> --- a/lib/python/rs274/glcanon.py
> +++ b/lib/python/rs274/glcanon.py
> @@ -46,6 +46,12 @@ class GLCanon(Translated, ArcsToSegmentsMixin):
> self.dwell_time = 0
> self.suppress = 0
>
> + def clear(self):
> + self.traverse[:] = []
> + self.feed[:] = []
> + self.arcfeed[:] = []
> + self.dwells[:] = []
> +
> def message(self, message): pass
>
> def next_line(self, st):
> diff --git a/src/emc/usr_intf/axis/scripts/axis.py
> b/src/emc/usr_intf/axis/scripts/axis.py
> index faa721a..6df52ef 100644
> --- a/src/emc/usr_intf/axis/scripts/axis.py
> +++ b/src/emc/usr_intf/axis/scripts/axis.py
> @@ -1938,6 +1938,8 @@ def open_file_guts(f, filtered=False, addrecent=True):
> set_first_line(0)
> t0 = time.time()
>
> + if o.g is not None:
> + o.g.clear()
> canon = None
> try:
> # be sure to switch modes to cause an interp synch, which
> --
> 1.6.6.62.g584f3
>
>
> ------------------------------------------------------------------------------
> SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
> Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
> http://p.sf.net/sfu/solaris-dev2dev
> _______________________________________________
> Emc-developers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/emc-developers
>
------------------------------------------------------------------------------
SOLARIS 10 is the OS for Data Centers - provides features such as DTrace,
Predictive Self Healing and Award Winning ZFS. Get Solaris 10 NOW
http://p.sf.net/sfu/solaris-dev2dev
_______________________________________________
Emc-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-developers