Fix msql_close(), pg_close() and sybase_close() (Sybase CT)
authorZeev Suraski <zeev@php.net>
Fri, 3 Nov 2000 02:46:49 +0000 (02:46 +0000)
committerZeev Suraski <zeev@php.net>
Fri, 3 Nov 2000 02:46:49 +0000 (02:46 +0000)
NEWS
ext/msql/php_msql.c
ext/mysql/libmysql/mysql_version.h
ext/pgsql/pgsql.c
ext/sybase_ct/php_sybase_ct.c

diff --git a/NEWS b/NEWS
index 9dde58ada94a439655582a233721dfb7af17a69d..4dad3663020523cc0261d44a7884d21fefd92cf0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,8 +2,9 @@ PHP 4.0                                                                    NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
 ?? ??? 2000, Version 4.0.4
+- Fixed mysql_close(), pg_close(), msql_close() and sybase_close() - they
+  weren't properly closing the SQL connections (Zeev)
 - Fixed crypt() to supply random seed if none is given (Andi)
-- Fixed mysql_close() - it wasn't properly closing MySQL connections (Zeev)
 - Made print_r support recursive data structures, e.g., $GLOBALS. (Zeev)
 - Fixed a bug that caused PHP not to properly flush its output buffer, if more
   than one output buffer was used. (Zeev)
index 8b09ab6fc8aaf931429c4ee99fb90a5d03c4e61d..90c8ff37edc07071455fa286f3cfb6f4c015fcc7 100644 (file)
@@ -404,12 +404,16 @@ DLEXPORT PHP_FUNCTION(msql_close)
        
        ZEND_FETCH_RESOURCE2(msql, int, &msql_link, id, "mSQL-Link", msql_globals.le_link, msql_globals.le_plink);
        
-       zend_list_delete(Z_RESVAL_P(msql_link));
-       if (Z_RESVAL_P(mysql_link)==msql_globals.default_link) {
+       if (id==-1) { /* explicit resource number */
+               zend_list_delete(Z_RESVAL_P(msql_link));
+       }
+
+       if (id!=-1 
+               || (msql_link && Z_RESVAL_P(msql_link)==msql_globals.default_link)) {
                zend_list_delete(msql_globals.default_link);
+               msql_globals.default_link = -1;
        }
 
-       zend_list_delete(id);
        RETURN_TRUE;
 }
 /* }}} */
index 1f868704fe8a77d05b50858e572582204d3561d2..32ac9f3133c01889640943b92c5d6076e05adb5e 100644 (file)
@@ -11,7 +11,6 @@
 #define FRM_VER                                6
 #define MYSQL_VERSION_ID               32322
 #define MYSQL_PORT                     3306
-#define MYSQL_UNIX_ADDR                        "/tmp/mysql.sock"
 
 /* mysqld compile time options */
 #ifndef MYSQL_CHARSET
index 69d91bfa071465d69c17d2621e3bb8275b4cb388..11722eae0a473cacad9742a5e07d59a4b1181151 100644 (file)
@@ -466,7 +466,7 @@ PHP_FUNCTION(pg_pconnect)
 PHP_FUNCTION(pg_close)
 {
        zval **pgsql_link = NULL;
-       int id = -1;
+       int id;
        PGconn *pgsql;
        PGLS_FETCH();
        
@@ -479,6 +479,7 @@ PHP_FUNCTION(pg_close)
                        if (zend_get_parameters_ex(1, &pgsql_link)==FAILURE) {
                                RETURN_FALSE;
                        }
+                       id = -1;
                        break;
                default:
                        WRONG_PARAM_COUNT;
@@ -486,9 +487,15 @@ PHP_FUNCTION(pg_close)
        }
        
        ZEND_FETCH_RESOURCE2(pgsql, PGconn *, pgsql_link, id, "PostgreSQL link", le_link, le_plink);
-       zend_list_delete(Z_RESVAL_PP(pgsql_link));
-       if (Z_RESVAL_PP(pgsql_link)==PGG(default_link)) {
+
+       if (id==-1) { /* explicit resource number */
+               zend_list_delete(Z_RESVAL_PP(pgsql_link));
+       }
+
+       if (id!=-1 
+               || (pgsql_link && Z_RESVAL_PP(pgsql_link)==PGG(default_link))) {
                zend_list_delete(PGG(default_link));
+               PGG(default_link) = -1;
        }
 
        RETURN_TRUE;
index f0c95ba7c53de13489c7e63afe0a2174273cb0fe..d93a98045719ae876e437faefae91bc1c2d02631 100644 (file)
@@ -687,10 +687,14 @@ PHP_FUNCTION(sybase_close)
        
        ZEND_FETCH_RESOURCE2(sybase_ptr, sybase_link *, &sybase_link_index, id, "Sybase-Link", le_link, le_plink);
        
-       if (sybase_link_index) {
-               zend_list_delete(sybase_link_index->value.lval);
-       } else {
-               zend_list_delete(id);
+       if (id==-1) { /* explicit resource number */
+               zend_list_delete(Z_RESVAL_P(sybase_link_index));
+       }
+
+       if (id!=-1 
+               || (sybase_link_index && Z_RESVAL_P(sybase_link_index)==SybCtG(default_link))) {
+               zend_list_delete(SybCtG(default_link));
+               SybCtG(default_link) = -1;
        }
 
        RETURN_TRUE;