<p dir="ltr">Looks like a 'self-as-descendant' idea in the data structure. If the algorithms depend on that, I'm sure the right person could add a strategic weaken. </p>
<br/><div class="cm_quote" style=" color: #787878">On Fri, Sep 12, 2014 at 2:22 PM, Dmitry Karasik &lt;<a href="mailto:dmitry@karasik.eu.org">dmitry@karasik.eu.org</a>&gt; wrote:</div><br><div id="oldcontent" style="background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial;"><blockquote style=""><p dir="ltr">Dear all,
<br>

<br>
I've hit a memory leak issue that OOMs our daemons once in a while, and what is
<br>
worse, I don't have the BioPerl expertise to fix it (I would send a patch
<br>
otherwise ). The problem is that Bio::Species and/or the modules it uses forms
<br>
cyclic references, which are never killed by perl automatically. I guess
<br>
either some internal data structure has to be reworked, or there should be some
<br>
strategic placing of Scalar::Util::weaken, but I have no idea where (or rather,
<br>
I could devise a hack that hammers weaken() instantly, but I don't think
<br>
this is the right approach).
<br>

<br>
It's very simple to reproduce, f.ex. by this:
<br>

<br>
        use Devel::Cycle;
<br>
        use Bio::Species;
<br>
        find_cycle(Bio::Species-&gt;new(-classification =&gt; ['A']));
<br>

<br>
which outputs
<br>

<br>
        Cycle (1):
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Bio::Species::A-&gt;{'taxon'} =&gt; \%Bio::Taxon::B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Bio::Taxon::B-&gt;{'_ancestor'} =&gt; \%Bio::Taxon::C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Bio::Taxon::C-&gt;{'_desc'} =&gt; \%D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $D-&gt;{'1'} =&gt; \%Bio::Taxon::B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>

<br>
        Cycle (2):
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Bio::Species::A-&gt;{'tree'} =&gt; \%Bio::Tree::Tree::E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Bio::Tree::Tree::E-&gt;{'_rootnode'} =&gt; \%Bio::Taxon::C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Bio::Taxon::C-&gt;{'_desc'} =&gt; \%D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $D-&gt;{'1'} =&gt; \%Bio::Taxon::B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $Bio::Taxon::B-&gt;{'_ancestor'} =&gt; \%Bio::Taxon::C&nbsp;&nbsp;&nbsp;&nbsp; 
<br>

<br>
whereas I would expect it would print nothing.
<br>

<br>
I should really much like to ask the devs for a closer look. It's here on
<br>
github: https://github.com/bioperl/bioperl-live/issues/81
<br>

<br>
Thank you in advance!
<br>

<br>
-- 
<br>
Sincerely,
<br>
        Dmitry Karasik
<br>
_______________________________________________
<br>
Bioperl-l mailing list
<br>
Bioperl-l@mailman.open-bio.org
<br>
http://mailman.open-bio.org/mailman/listinfo/bioperl-l
<br>
</p>
</blockquote></div>