[Bioperl-l] Seeking comments, Bio::Species memleak fix
Chris Fields
cjfields at illinois.edu
Sat Jul 3 18:27:32 UTC 2010
No comments. I'm assuming this is okay to merge into master branch, so will merge in later today.
chris
On Jun 30, 2010, at 12:35 PM, Chris Fields wrote:
> All,
>
> I have a branch in github (topic/species_proxy) that converts
> Bio::Species into a proxy class. This appears to fix a ton of problems
> introduced during the Tree/Taxonomy refactoring a few years back.
>
> Advantages:
>
> 1) No need for Scalar::Util::weaken within Bio::Species or
> Bio::Tree::Node. Cleanup methods are handled during instance
> destruction.
>
> 2) This paves the way a bit more for eventual deprecation of
> Bio::Species in 1.7.
>
> 3) Works with bioperl-db and BioSQL as is (passes on both my local
> Ubuntu 9.10 and Mac OS X 10.6), perl 5.10 and 5.12, should work with
> earlier perl versions.
>
> Disadvantages:
>
> 1) For every Bio::Species, we have a Bio::Taxon, a Bio::Tree::Tree, and
> a Bio::DB::Taxonomy (one instance more than the previous Bio::Species
> implementation). We can probably reduce that down considerably by
> creating the needed instances lazily.
>
> This fixes:
>
> bug 3017 use threads to get genbank file error
> bug 2594 Bio::Species memory leak
>
> and possibly others:
>
> bug 2773 Bio::Tree::Node gets destroyed even though it is still live
>
> If there are no comments, I'll merge this with the master branch in the
> next few days.
>
> ++++++++++++++++++++++++++++++++++++++++++
>
> (NOTE: skip the next two paragraphs if you don't want to read nasty
> implementation details)
>
> Bio::Species had previously inherited from Bio::Taxon, but also required
> it to hold a Bio::Tree::Tree which contained a circular reference back
> to the Bio::Species object, thus requiring Scalar::Util::weaken. This
> has caused several hard-to-diagnose problems with premature garbage
> collection, including some issues with threads (bug 3017).
>
> The above proxy fix converts Bio::Species into a proxy class, which only
> inherits the interface (Bio::Tree::NodeI), and delegates to an internal
> Bio::Taxon and a Bio::Tree::Tree. Neither contained object has a
> reference back to the Bio::Species instance, thus the class can perform
> proper garbage collection.
>
> chris
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l
More information about the Bioperl-l
mailing list