Author: turnstep
Date: Sat Mar 26 13:05:05 2011
New Revision: 14775
Added:
DBD-Pg/trunk/testme.tmp (contents, props changed)
Log:
Quick little testing file I use: might as well clean it up and make it public.
Added: DBD-Pg/trunk/testme.tmp
==============================================================================
--- (empty file)
+++ DBD-Pg/trunk/testme.tmp Sat Mar 26 13:05:05 2011
@@ -0,0 +1,89 @@
+#!/usr/bin/env perl
+
+BEGIN {
+ use lib '.', 'blib/lib', 'blib/arch';
+ system 'make';
+}
+
+use strict;
+use warnings;
+use DBI ':sql_types';
+use Data::Dumper;
+use YAML;
+use DBD::Pg qw/:pg_types/;
+use Data::Peek;
+
+use vars qw/$sth $info $count $SQL/;
+
+my $tracelevel = shift || 0;
+$ENV{DBI_TRACE} = $tracelevel;
+
+my $DSN = 'DBI:Pg:dbname=postgres';
+my $dbh = DBI->connect($DSN, '', '', {AutoCommit=>0,RaiseError=>1,PrintError=>0})
+ or die "Connection failed!\n";
+
+my $me = $dbh->{Driver}{Name};
+print "DBI is version $DBI::VERSION, I am $me, version of DBD::Pg is $DBD::Pg::VERSION\n";
+
+memory_leak_test_bug_65734();
+
+exit;
+
+sub memory_leak_test_bug_65734 {
+
+ ## Memory leak when an array appears in the bind variables
+
+ ## Set things up
+ $dbh->do('CREATE TEMPORARY TABLE tbl1 (id SERIAL PRIMARY KEY, val INTEGER[])');
+ $dbh->do('CREATE TEMPORARY TABLE tbl2 (id SERIAL PRIMARY KEY, val INTEGER)');
+
+ ## Subroutine that performs the leaking action
+ sub leakmaker1 {
+ $dbh->do('INSERT INTO tbl1(val) VALUES (?)', undef, [123]);
+ }
+
+ ## Control subroutine that does not leak
+ sub leakmaker2 {
+ $dbh->do('INSERT INTO tbl2(val) VALUES (?)', undef, 123);
+ }
+
+ leakcheck(\&leakmaker1,1000);
+
+ exit;
+
+} ## end of memory_leak_test_bug_65734
+
+
+sub leakcheck {
+
+ my $sub = shift;
+ my $count = shift || 1000;
+ my $maxsize = shift || 100000;
+
+ ## Safety check:
+ if (exists $ENV{DBI_TRACE} and $ENV{DBI_TRACE} != 0 and $ENV{DBI_TRACE} != 42) {
+ $maxsize = 1;
+ }
+
+ my $runs = 0;
+
+ while (1) {
+
+ last if $runs++ >= $maxsize;
+
+ &$sub();
+
+ unless ($runs % $count) {
+ printf "Cycles: %d\tProc size: %uK\n",
+ $runs,
+ (-f "/proc/$$/stat")
+ ? do { local @ARGV="/proc/$$/stat"; (split (/\s/, <>))[22] / 1024 }
+ : -1;
+ }
+
+
+ }
+
+} ## end of leakcheck
+
+__END__
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.