]> granicus.if.org Git - php/commitdiff
Fix for Bug #17572
authorDan Kalowsky <kalowsky@php.net>
Tue, 13 Aug 2002 23:48:05 +0000 (23:48 +0000)
committerDan Kalowsky <kalowsky@php.net>
Tue, 13 Aug 2002 23:48:05 +0000 (23:48 +0000)
ext/odbc/php_odbc.c

index be52ab4b64fa76504ad4da60b3e6a142c9ac87c0..e10f8dad381bbb51e6a1e27454fc51312a1c8376 100644 (file)
@@ -211,8 +211,23 @@ static void safe_odbc_disconnect( void *handle )
  */
 static void _close_odbc_conn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
 {
+       int i, nument, type;
+       void *ptr;
+       odbc_result *res;
+
        odbc_connection *conn = (odbc_connection *)rsrc->ptr;
 
+       nument = zend_hash_next_free_element(&EG(regular_list));
+       for(i = 1; i < nument; i++) {
+               ptr = zend_list_find(i, &type);
+               if (ptr && (type == le_result)) {
+                       res = (odbc_result *)ptr;
+                       if (res->conn_ptr == conn) {
+                               zend_list_delete(i);
+                       }
+               }
+       }
+
        safe_odbc_disconnect(conn->hdbc);
        SQLFreeConnect(conn->hdbc);
        SQLFreeEnv(conn->henv);
@@ -225,7 +240,21 @@ static void _close_odbc_conn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
  */
 static void _close_odbc_pconn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
 {
+       int i, nument, type;
+       void *ptr;
+       odbc_result *res;
        odbc_connection *conn = (odbc_connection *)rsrc->ptr;
+
+       nument = zend_hash_next_free_element(&EG(regular_list));
+       for(i = 1; i < nument; i++) {
+               ptr = zend_list_find(i, &type);
+               if (ptr && (type == le_result)) {
+                       res = (odbc_result *)ptr;
+                       if (res->conn_ptr == conn) {
+                               zend_list_delete(i);
+                       }
+               }
+       }
        
        safe_odbc_disconnect(conn->hdbc);
        SQLFreeConnect(conn->hdbc);