In perl.git, the branch blead has been updated

<http://perl5.git.perl.org/perl.git/commitdiff/11d95c64b33c4850567d44b5bbaeaa74eeff1525?hp=a3ccc6f96faf75718ef71a5bfdce27781e7ae31a>

- Log -----------------------------------------------------------------
commit 11d95c64b33c4850567d44b5bbaeaa74eeff1525
Author: Nicholas Clark <[email protected]>
Date:   Thu Oct 21 07:58:11 2010 +0200

    [GNO]DBM_File must free any filter CVs in DESTROY.
    
    They have been leaking these since DBM filters were first added in 1999 by
    9fe6733ac5627edd. DB_File and SDBM_File have always correctly freed their
    filters.
-----------------------------------------------------------------------

Summary of changes:
 ext/GDBM_File/GDBM_File.xs |    8 ++++++++
 ext/NDBM_File/NDBM_File.xs |    8 ++++++++
 ext/ODBM_File/ODBM_File.xs |    8 ++++++++
 3 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/ext/GDBM_File/GDBM_File.xs b/ext/GDBM_File/GDBM_File.xs
index d1f99e2..b418b25 100644
--- a/ext/GDBM_File/GDBM_File.xs
+++ b/ext/GDBM_File/GDBM_File.xs
@@ -94,6 +94,14 @@ gdbm_DESTROY(db)
        GDBM_File       db
        CODE:
        gdbm_close(db);
+       if (db->filter_fetch_key)
+           SvREFCNT_dec(db->filter_fetch_key) ;
+       if (db->filter_store_key)
+           SvREFCNT_dec(db->filter_store_key) ;
+       if (db->filter_fetch_value)
+           SvREFCNT_dec(db->filter_fetch_value) ;
+       if (db->filter_store_value)
+           SvREFCNT_dec(db->filter_store_value) ;
        safefree(db);
 
 #define gdbm_FETCH(db,key)                     gdbm_fetch(db->dbp,key)
diff --git a/ext/NDBM_File/NDBM_File.xs b/ext/NDBM_File/NDBM_File.xs
index aa769ec..84d44cb 100644
--- a/ext/NDBM_File/NDBM_File.xs
+++ b/ext/NDBM_File/NDBM_File.xs
@@ -80,6 +80,14 @@ ndbm_DESTROY(db)
        NDBM_File       db
        CODE:
        dbm_close(db->dbp);
+       if (db->filter_fetch_key)
+           SvREFCNT_dec(db->filter_fetch_key) ;
+       if (db->filter_store_key)
+           SvREFCNT_dec(db->filter_store_key) ;
+       if (db->filter_fetch_value)
+           SvREFCNT_dec(db->filter_fetch_value) ;
+       if (db->filter_store_value)
+           SvREFCNT_dec(db->filter_store_value) ;
        safefree(db);
 
 #define ndbm_FETCH(db,key)                     dbm_fetch(db->dbp,key)
diff --git a/ext/ODBM_File/ODBM_File.xs b/ext/ODBM_File/ODBM_File.xs
index 2510d5e..8faf4a9 100644
--- a/ext/ODBM_File/ODBM_File.xs
+++ b/ext/ODBM_File/ODBM_File.xs
@@ -122,6 +122,14 @@ DESTROY(db)
        CODE:
        dbmrefcnt--;
        dbmclose();
+       if (db->filter_fetch_key)
+           SvREFCNT_dec(db->filter_fetch_key) ;
+       if (db->filter_store_key)
+           SvREFCNT_dec(db->filter_store_key) ;
+       if (db->filter_fetch_value)
+           SvREFCNT_dec(db->filter_fetch_value) ;
+       if (db->filter_store_value)
+           SvREFCNT_dec(db->filter_store_value) ;
        safefree(db);
 
 datum_value

--
Perl5 Master Repository

Reply via email to