Author: timbo
Date: Mon Nov 19 14:41:38 2012
New Revision: 15476

Modified:
   dbi/trunk/Changes
   dbi/trunk/DBI.xs

Log:
Fixed RT#80474 - segfault in DESTROY with threads.

Modified: dbi/trunk/Changes
==============================================================================
--- dbi/trunk/Changes   (original)
+++ dbi/trunk/Changes   Mon Nov 19 14:41:38 2012
@@ -8,21 +8,24 @@
 
 =cut
 
-=head2 Changes in DBI 1.623
 
-  Added logic to force destruction of children before parents
-    during global destruction. Currently experimental.
+=head2 Changes in DBI 1.623
 
+  Fixed RT#64330 - ping wipes out errstr (Martin J. Evans).
+  Fixed RT#80474 - segfault in DESTROY with threads.
   Fixed unused variable / self-assignment compiler warnings.
 
   Corrected typo in DBI->installed_versions docs RT#78825
     thanks to Jan Dubois.
+  Corrected a spelling error thanks to Chris Sanders.
+
+  Added logic to force destruction of children before parents
+    during global destruction. Currently experimental.
 
   Added new tests to 08keeperr for RT#64330
    thanks to Kenichi Ishigaki.
 
-  Fix RT#64330 - ping wipes out errstr.
-    Removed _not_impl (Martin J. Evans).
+  Removed internal _not_impl method (Martin J. Evans).
 
 =head2 Changes in DBI 1.622 (svn r15327) 6th June 2012
 

Modified: dbi/trunk/DBI.xs
==============================================================================
--- dbi/trunk/DBI.xs    (original)
+++ dbi/trunk/DBI.xs    Mon Nov 19 14:41:38 2012
@@ -3265,15 +3265,6 @@
         profile_t1 = dbi_time(); /* just get start time here */
     }
 
-    if ((i = DBIc_DEBUGIV(imp_xxh))) { /* merge handle into global */
-        I32 h_trace_level = (i & DBIc_TRACE_LEVEL_MASK);
-        if ( h_trace_level > trace_level )
-            trace_level = h_trace_level;
-        trace_flags = (trace_flags & ~DBIc_TRACE_LEVEL_MASK)
-                    | (          i & ~DBIc_TRACE_LEVEL_MASK)
-                    | trace_level;
-    }
-
 #ifdef DBI_USE_THREADS
 {
     PerlInterpreter * h_perl;
@@ -3298,6 +3289,15 @@
 }
 #endif
 
+    if ((i = DBIc_DEBUGIV(imp_xxh))) { /* merge handle into global */
+        I32 h_trace_level = (i & DBIc_TRACE_LEVEL_MASK);
+        if ( h_trace_level > trace_level )
+            trace_level = h_trace_level;
+        trace_flags = (trace_flags & ~DBIc_TRACE_LEVEL_MASK)
+                    | (          i & ~DBIc_TRACE_LEVEL_MASK)
+                    | trace_level;
+    }
+
     /* Check method call against Internal Method Attributes */
     if (ima_flags) {
 

Reply via email to