ID: 29019
User updated by: cyberlot at cyberlot dot net
Reported By: cyberlot at cyberlot dot net
Status: Open
Bug Type: MySQL related
Operating System: *
PHP Version: 5.0.0RC3
New Comment:
Thanks, maybe I should pull out some C books and try to help out
more...
Anyway that patch worked, sprinkle some pixie dust on it or what ever
you do and send it on its way.
Previous Comments:
------------------------------------------------------------------------
[2004-07-05 20:49:24] [EMAIL PROTECTED]
No your analysis looks correct.
Try the following patch:
diff -u -p -d -r1.41 mysqli.c
--- ext/mysqli/mysqli.c 23 Jun 2004 16:47:25 -0000 1.41
+++ ext/mysqli/mysqli.c 5 Jul 2004 18:48:51 -0000
@@ -132,7 +132,7 @@ static void mysqli_objects_free_storage(
FREE_HASHTABLE(intern->zo.properties);
/* link object */
- if (intern->zo.ce == mysqli_link_class_entry) {
+ if (instanceof_function(intern->zo.ce, mysqli_link_class_entry
TSRMLS_CC)) {
if (my_res && my_res->ptr) {
MY_MYSQL *mysql = (MY_MYSQL *)my_res->ptr;
------------------------------------------------------------------------
[2004-07-05 20:24:03] cyberlot at cyberlot dot net
My C more then sucks so excuse me for even trying..
in mysqli.c intern->zo.ce = class_type;
intern->zo.ce is only used 4 places in mysqli.c
1. When you assign it
2. stmt and result entrys, not changed my extending the class
3. line 135, when closing the object, In this same statement you also
run mysql_close.
This if statement is returning false because
intern->zo.ce == mysqli_link_class_entry is wrong, by extending the
class I have changed the class type therefore breaking the closing of
the object.
I hope this helps fix the problem
------------------------------------------------------------------------
[2004-07-05 19:51:23] cyberlot at cyberlot dot net
narrowed the problem down further, Its directly related to me trying to
extend the mysqli class. If I take out the extend it closes properly, If
I put in the extend with no functions at all it does not close properly
So
<?
$mysqli = new
extend_mysqli('localhost','billing','billing','billing');
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
?>
Connection does not close properly
<?
$mysqli = new mysqli('localhost','billing','billing','billing');
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
?>
Connection does close properly.
------------------------------------------------------------------------
[2004-07-05 19:39:22] cyberlot at cyberlot dot net
Description:
------------
mysqli, using class interface not not closing connection at end of
script unless you specificly call $mysqli->close
This is a change of behavior from the normal mysql extension which does
not "require" you to close connection.
Reproduce code:
---------------
<?
$mysqli = new
extend_mysqli('localhost','billing','billing','billing');
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
?>
Expected result:
----------------
Every time its run it should release the database connection
Actual result:
--------------
Each time you run it a new db connection is done until you max out the
mysql server.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=29019&edit=1