<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        text-align:right;
        direction:rtl;
        unicode-bidi:embed;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'><span
style='color:#1F497D'>This is interesting – there’s a .NET exception
object which is keeping a traceback frame alive which is keeping the
just_numbers list alive. We should clear out the local .NET exception and
the memory will then be eligible for collection. The good news is that as
soon as this method is no longer on the stack the memory is reclaimable (so it’s
really just that we’re not collecting soon enough – not that we’re
actually leaking the memory) but we should fix it anyway.<o:p></o:p></span></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'><span
style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'><span
style='color:#1F497D'>I’ve opened this bug: <a
href="http://ironpython.codeplex.com/WorkItem/View.aspx?WorkItemId=26244">http://ironpython.codeplex.com/WorkItem/View.aspx?WorkItemId=26244</a><o:p></o:p></span></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'><span
style='color:#1F497D'><o:p> </o:p></span></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'><span
style='color:#1F497D'><o:p> </o:p></span></p>
<div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'>
<div>
<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'><b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
users-bounces@lists.ironpython.com [mailto:users-bounces@lists.ironpython.com] <b>On
Behalf Of </b>Idan Zaltzberg<br>
<b>Sent:</b> Thursday, February 18, 2010 2:58 AM<br>
<b>To:</b> users@lists.ironpython.com<br>
<b>Cc:</b> Ronnie Maor; Avner Rosenan<br>
<b>Subject:</b> [IronPython] Bug fixes in Ipy 2.6.1<o:p></o:p></span></p>
</div>
</div>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'><o:p> </o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>Hi,<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>In
Ipy 2.6 there some issues of memory leak when using generator methods.<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>I
downloaded Ipy 2.6.1 RC1 and indeed most of them were fixed.<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>Still,
one issue still remains the same but I'm not entirely sure this is a real bug:<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>The
following code shows that in some cases, some memory is not released even after
GC, is that ok?<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'> <o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
def coroutine():<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
just_numbers = range(1,1000000)<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
def inner_method():<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
return just_numbers<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
yield None<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
raise Exception("some exception") # comment out this line to make the
test not work<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
from System import GC<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
def get_memory():<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
for _ in xrange(4):<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
GC.Collect()<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
GC.WaitForPendingFinalizers()<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
return GC.GetTotalMemory(True)/1e6<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
before = get_memory()<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
crt = coroutine()<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
try:<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
crt.next()<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
crt.next()<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
except:<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
pass<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
crt = None<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
after = get_memory()<o:p></o:p></p>
<p class=MsoNormal style='text-align:left;direction:ltr;unicode-bidi:embed'>
self.assert_(after-before > 10,'There should be a memory leak in this
case.before=%s after=%s' % (before,after))<o:p></o:p></p>
</div>
</div>
</body>
</html>