<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"><meta name="Generator" content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@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;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        text-align:right;
        direction:rtl;
        unicode-bidi:embed;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang="EN-US" link="blue" vlink="purple"><div class="WordSection1"><p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D">I want to try to build from source.</span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D">We are using the 2.6.1 release from April on .Net 2.0, so I guess I need to download:</span></p><p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
<span style="color:#1F497D">IronPython-2.6.1-Src-Net20SP1.zip</span></p><p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="color:#1F497D">After that, can you tell which configuration to use in Visual Studio in order to get the same result as d/ling the binaries directly from site?</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 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""> <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, October 04, 2010 7:22 PM<br><b>To:</b> Discussion of IronPython<br><b>Subject:</b> Re: [IronPython] Possible bug in Ipy 2.6.1 WeakDictionary</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">Nope, you have it right – this is fixed in the Main branch and internally it’s fixed in the 2.6 branch as well (There was a report about this from some internal uses of IronPython). Unfortunately it looks like the fix hasn’t propagated out to the 2.6 branch on CodePlex for some reason. I’ll try and figure out what’s going on there but either way it’ll be fixed in the next set of releases. If you want to build from source you can just add a call to CheckCleanup(); in there before the dict[new WeakObject(…)] = … assignment.</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: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""> <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, October 04, 2010 9:02 AM<br><b>To:</b> Discussion of IronPython<br><b>Subject:</b> [IronPython] Possible bug in Ipy 2.6.1 WeakDictionary</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">I'm investigating memory leakage in a Ipy 2.6.1 application.</p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">Using WinDbg I found a WeakDictionary that is only increasing in size, though most of the instances are already collected.</p><p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
This WeakDicitionary is used by a DelegationInfo object.</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">
Looking at the code, I think I found the problem:</p><p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">The method CheckCleanup is called the method "<span style="font-size:10.0pt;font-family:"Courier New";color:blue">public</span><span style="font-size:10.0pt;font-family:"Courier New""> <span style="color:blue">void</span> Add(TKey key, TValue value)"</span></p>
<p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><b>But it NOT called</b> from the indexer:</p><p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"> </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";color:blue">public</span><span style="font-size:10.0pt;font-family:"Courier New""> TValue <span style="color:blue">this</span>[TKey key] {</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">get</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">return</span> dict[key];</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:blue">set</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">// If the WeakHash already holds this value as a key, it will lead to a circular-reference and result</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">// in the objects being kept alive forever. The caller needs to ensure that this cannot happen.</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">Debug</span>.Assert(!dict.ContainsKey(<span style="color:blue">value</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""> dict[<span style="color:blue">new</span> <span style="color:#2B91AF">WeakObject</span>(key)] = <span style="color:blue">value</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;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"> </p><p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
Since the dictionary is populated using the indexer in DelegateInfo:</p><p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed"><span style="font-size:10.0pt;font-family:"Courier New"">_constantMap[target] = <span style="color:blue">new</span> <span style="color:#2B91AF">WeakReference</span>(clone = (<span style="color:blue">object</span>[])_constants.Clone());</span></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">This means that the "version" field is never updated, and the dictionary never gets cleaned up.</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">Have I got something wrong here?</p><p class="MsoNormal" style="text-align:left;direction:ltr;unicode-bidi:embed">
Thanks</p></div></div></body></html>