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;

Reply via email to