On 04/27/10 21:13, Tim Bunce wrote:
On Fri, Apr 23, 2010 at 05:57:29AM -0700, hmbr...@cvs.perl.org wrote:
+use Config;
+
+our $threadid = 0; # holds private thread id of driver
+ $this->STORE (p_threadid => $threadid);
+sub CLONE
+{
+ $Config{usethreads}&& $INC{"threads.pm"} and
+ $threadid = threads->tid ();
+ } # CLONE
+
+ my $ownerid = $dbh->FETCH ("p_threadid");
+ $ownerid == $DBD::File::dr::threadid or
+ croak "database handle is owned by thread $ownerid and this is
$DBD::File::dr::threadid"
The DBI method dispatch code already checks thread ownership of handles
(see DBIc_THR_USER in DBI.xs) so is this really needed?
You're right. I didn't check this before and I didn't check whether this
feature is in DBI::PurePerl (grepping for 'thread' in lib/DBI/PurePerl.pm
didn't find anything, but I didn't review the code). I also miss a test
which proves that it works.
For this release, the patch which takes the p_thread stuff out of DBD::File
is attached. After it, some action seems required ...
Jens
Index: lib/DBD/File.pm
===================================================================
--- lib/DBD/File.pm (revision 13932)
+++ lib/DBD/File.pm (working copy)
@@ -123,10 +123,7 @@
package DBD::File::dr;
use strict;
-use Config;
-our $threadid = 0; # holds private thread id of driver
-
$DBD::File::dr::imp_data_size = 0;
sub connect ($$;$$$)
@@ -175,7 +172,6 @@
};
}
$this->STORE (Active => 1);
- $this->STORE (p_threadid => $threadid);
return set_versions ($this);
} # connect
@@ -231,12 +227,6 @@
{
} # disconnect_all
-sub CLONE
-{
- $Config{usethreads} && $INC{"threads.pm"} and
- $threadid = threads->tid ();
- } # CLONE
-
sub DESTROY
{
undef;
@@ -260,10 +250,6 @@
{
my ($dbh, $statement, @attribs) = @_;
- my $ownerid = $dbh->FETCH ("p_threadid");
- $ownerid == $DBD::File::dr::threadid or
- croak "database handle is owned by thread $ownerid and this is
$DBD::File::dr::threadid";
-
# create a 'blank' sth
my $sth = DBI::_new_sth ($dbh, {Statement => $statement});
@@ -298,7 +284,6 @@
$sth->STORE ("f_stmt", $stmt);
$sth->STORE ("f_params", []);
$sth->STORE ("NUM_OF_PARAMS", scalar ($stmt->params ()));
- $sth->STORE ("p_threadid", $DBD::File::dr::threadid);
}
}
return $sth;