<html>
<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:0cm;
        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;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:36.0pt;
        margin-bottom:0cm;
        margin-left:0cm;
        margin-bottom:.0001pt;
        text-align:right;
        direction:rtl;
        unicode-bidi:embed;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle19
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle20
        {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:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.Section1
        {page:Section1;}
/* List Definitions */
@list l0
        {mso-list-id:753472813;
        mso-list-type:hybrid;
        mso-list-template-ids:1100926382 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level4
        {mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level7
        {mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
-->
</style>
</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">Thanks for the fast reply.</span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D">Could you estimate when and how (in what version) the fix
will be deployed?</span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D">Regardless, our current fix is to "throw"
exception when we want the generator to be disposed and catch it ourselves, is
that the right way to go?</span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D"> </span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<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"">
<a href="mailto:users-bounces@lists.ironpython.com">users-bounces@lists.ironpython.com</a> [mailto:<a href="mailto:users-bounces@lists.ironpython.com">users-bounces@lists.ironpython.com</a>] <b>On
Behalf Of </b>Dino Viehland<br>
<b>Sent:</b> Monday, December 28, 2009 9:47 PM<br>
<b>To:</b> Discussion of IronPython<br>
<b>Subject:</b> Re: [IronPython] Memory leaks in Ipy 2.6</span></p>
</div>
</div>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"> </p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D">This is definitely a bug – we’re leaking our stack frames
on the CLR’s finalizer thread when we swallow exceptions while closing the
generator. I think this is the correct fix but I haven’t fully tested it
yet, in our generator we have the code below but it’s missing the assignment of
null to DynamicStackFrames:</span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D"> </span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
<span style="color:blue">try</span> {</span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
@throw(<span style="color:blue">new</span> <span style="color:#2B91AF">GeneratorExitException</span>());</span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New""> </span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
<span style="color:green">// Generator should not have exited normally. </span></span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
<span style="color:blue">throw</span> <span style="color:blue">new</span> <span style="color:#2B91AF">RuntimeException</span>(<span style="color:#A31515">"generator
ignored GeneratorExit"</span>);</span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
} <span style="color:blue">catch</span> (<span style="color:#2B91AF">StopIterationException</span>)
{</span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
<span style="color:green">// Ignore</span></span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
<span style="color:#2B91AF">ExceptionHelpers</span>.DynamicStackFrames = <span style="color:blue">null</span>; // adding this fixes it</span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
} <span style="color:blue">catch</span> (<span style="color:#2B91AF">GeneratorExitException</span>)
{</span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
<span style="color:green">// Ignore</span></span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
<span style="color:#2B91AF">ExceptionHelpers</span>.DynamicStackFrames = <span style="color:blue">null</span>; // adding this fixes it</span></p>
<p class="MsoNormal" style="text-align:left;text-autospace:none;direction:ltr;
unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">
}</span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D"> </span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D">This definitely fixes 1 and 2. After running this 3
doesn’t actually seem to leak memory when running repeatedly for me but
after-before > 10 is True. I’ll take a closer look and make sure this
is the correct fix after the new year when I’m back in the office.</span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D"> </span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<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"">
<a href="mailto:users-bounces@lists.ironpython.com">users-bounces@lists.ironpython.com</a> [mailto:<a href="mailto:users-bounces@lists.ironpython.com">users-bounces@lists.ironpython.com</a>] <b>On
Behalf Of </b>Idan Zaltzberg<br>
<b>Sent:</b> Monday, December 28, 2009 10:33 AM<br>
<b>To:</b> <a href="mailto:users@lists.ironpython.com">users@lists.ironpython.com</a><br>
<b>Subject:</b> [IronPython] Memory leaks in Ipy 2.6</span></p>
</div>
</div>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"> </p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">Hi,</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">Working
with the new version I have encountered some problems which look like memory
leaks to me.</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">I've
written 3 test methods that reproduce the problems, and would appreciate your
response.</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">Thanks</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><u>Problem
1</u></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">Occurs
when you do the all of the following</p>
<p class="MsoListParagraph" style="mso-margin-top-alt:0cm;margin-right:0cm;
margin-bottom:0cm;margin-left:36.0pt;margin-bottom:.0001pt;text-align:left;
text-indent:-18.0pt;mso-list:l0 level1 lfo2;direction:ltr;unicode-bidi:embed"><span style="mso-list:Ignore">1.<span style="font:7.0pt "Times New Roman"">
</span></span><span dir="LTR"></span>Define a generator method</p>
<p class="MsoListParagraph" style="mso-margin-top-alt:0cm;margin-right:0cm;
margin-bottom:0cm;margin-left:36.0pt;margin-bottom:.0001pt;text-align:left;
text-indent:-18.0pt;mso-list:l0 level1 lfo2;direction:ltr;unicode-bidi:embed"><span style="mso-list:Ignore">2.<span style="font:7.0pt "Times New Roman"">
</span></span><span dir="LTR"></span>Insert a try/except clause in the
method</p>
<p class="MsoListParagraph" style="mso-margin-top-alt:0cm;margin-right:0cm;
margin-bottom:0cm;margin-left:36.0pt;margin-bottom:.0001pt;text-align:left;
text-indent:-18.0pt;mso-list:l0 level1 lfo2;direction:ltr;unicode-bidi:embed"><span style="mso-list:Ignore">3.<span style="font:7.0pt "Times New Roman"">
</span></span><span dir="LTR"></span>define an inner method that uses
some local variable</p>
<p class="MsoListParagraph" style="mso-margin-top-alt:0cm;margin-right:0cm;
margin-bottom:0cm;margin-left:36.0pt;margin-bottom:.0001pt;text-align:left;
text-indent:-18.0pt;mso-list:l0 level1 lfo2;direction:ltr;unicode-bidi:embed"><span style="mso-list:Ignore">4.<span style="font:7.0pt "Times New Roman"">
</span></span><span dir="LTR"></span>Call the generator method without
reaching the "StopIteration"</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">Looks
like the local variable used by the inner method is never cleared.</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">This
code reproduces the problem:</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def test_generator_memory_leak(self):</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
"""</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
Ipy 2.6 This test reproduces a memory leak when calling a
generator method without reaching the end.</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
"""</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def coroutine():</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
try: pass</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
except: pass</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
just_numbers = range(1,1000)</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def inner_method():</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
return just_numbers</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
yield None</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
yield None</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span dir="RTL"></span><span lang="HE" dir="RTL" style="font-family:"Arial","sans-serif""><span dir="RTL"></span> </span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
from System import GC</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def get_memory():</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
for _ in xrange(4):</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
GC.Collect()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
GC.WaitForPendingFinalizers()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
return GC.GetTotalMemory(True)/1e6</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
before = get_memory()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
for j in xrange(10000):</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
crt = coroutine()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
crt.next()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
after = get_memory()</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))</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"> </p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><u>Problem
2</u></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">The
same as problem, just instead of defining an inner method, just call
"eval" with any string</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def test_generator_memory_leak2(self):</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
"""</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
Ipy 2.6 This test reproduces a memory leak when calling a
generator method without reaching the end.</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
"""</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def coroutine(b_bool):</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
try: pass</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
except: pass</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
if False: eval("")</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
just_numbers = range(1,1000)</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
yield None</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
yield None</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span dir="RTL"></span><span lang="HE" dir="RTL" style="font-family:"Arial","sans-serif""><span dir="RTL"></span> </span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
from System import GC</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def get_memory():</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
for _ in xrange(4):</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
GC.Collect()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
GC.WaitForPendingFinalizers()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
return GC.GetTotalMemory(True)/1e6</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
before = get_memory()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
for j in xrange(10000):</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
crt = coroutine(False)</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
crt.next()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span dir="RTL"></span><span lang="HE" dir="RTL" style="font-family:"Arial","sans-serif""><span dir="RTL"></span> </span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
after = get_memory()</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))</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"> </p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><u>Problem
3</u> </p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">This
is actually a our solution to problems 1,2. We noticed that if we end the iteration
by using "throw" then the memory doesn’t rise on subsequent
instances. Still there some memory increase that depends on the size of the
local variable which doesn’t seem to go away:</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"> </p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def test_generator_memory_leak2(self):</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
"""</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
Ipy 2.6 when exiting a generator method with an exception, some
objects are never collected</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
This seems to be static to the type (the leak does not grow if we
repeat the experiment</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
"""</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def coroutine():</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
just_numbers = range(1,1000000)</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def inner_method():</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
return just_numbers</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
yield None</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</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
from System import GC</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
def get_memory():</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
for _ in xrange(4):</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
GC.Collect()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
GC.WaitForPendingFinalizers()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
return GC.GetTotalMemory(True)/1e6</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
before = get_memory()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
crt = coroutine()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
try:</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
crt.next()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
crt.next()</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
except:</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
pass</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
crt = None</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
after = get_memory()</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))</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"> </p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"> </p>
</div>
</div>
</body>
</html>