- FPM:
. Fixed Bug #64915 (error_log ignored when daemonize=0). (Remi)
+- PDO:
+ . Fixed bug #63176 (Segmentation fault when instantiate 2 persistent PDO to
+ the same db server). (Laruence)
+
- PDO_DBlib:
. Fixed bug #63638 (Cannot connect to SQL Server 2008 with PDO dblib).
(Stanley Sufficool)
if (pdbh->std.properties) {
zend_hash_destroy(dbh->std.properties);
efree(dbh->std.properties);
+ if (dbh->std.properties_table) {
+ efree(dbh->std.properties_table);
+ }
} else {
pdbh->std.ce = dbh->std.ce;
pdbh->def_stmt_ce = dbh->def_stmt_ce;
}
zend_object_std_dtor(&dbh->std TSRMLS_CC);
dbh->std.properties = NULL;
+ dbh->std.properties_table = NULL;
dbh_free(dbh TSRMLS_CC);
}
--- /dev/null
+--TEST--
+Bug #63176 (Segmentation fault when instantiate 2 persistent PDO to the same db server)
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+?>
+--FILE--
+<?php
+require(dirname(__FILE__). DIRECTORY_SEPARATOR . 'config.inc');
+class PDO2 extends PDO {
+ protected $transLevel;
+}
+
+class PDO3 extends PDO {
+ protected $tomato;
+}
+
+
+class ModelA {
+ public function __construct($h) {
+ var_dump($h);
+ if ($h) {
+ $this->db = new PDO2(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, array(PDO::ATTR_PERSISTENT => true));
+ } else {
+ $this->db = new PDO2(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, array(PDO::ATTR_PERSISTENT => true));
+ }
+ $this->db->query('SELECT 1')->fetchAll();
+ }
+}
+
+$a = new ModelA(true);
+$b = new ModelA(false);
+
+var_dump($a);
+var_dump($b);
+--EXPECTF--
+bool(true)
+bool(false)
+object(ModelA)#%d (1) {
+ ["db"]=>
+ object(PDO2)#%d (1) {
+ ["transLevel":protected]=>
+ NULL
+ }
+}
+object(ModelA)#%d (1) {
+ ["db"]=>
+ object(PDO2)#%d (1) {
+ ["transLevel":protected]=>
+ NULL
+ }
+}