]> granicus.if.org Git - php/commitdiff
Fixed memory leak.
authorIlia Alshanetsky <iliaa@php.net>
Tue, 25 May 2004 14:12:15 +0000 (14:12 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 25 May 2004 14:12:15 +0000 (14:12 +0000)
ext/pdo/pdo_dbh.c
ext/pdo_pgsql/pgsql_driver.c

index 2616af500a081103b7d8eb7a8ddf3f1796b0a0af..b61200d61301212d59456870758702722cd737d0 100755 (executable)
@@ -657,6 +657,17 @@ static void pdo_dbh_free_storage(zend_object *object TSRMLS_DC)
        }
 
        dbh->methods->closer(dbh TSRMLS_CC);
+
+       if (dbh->data_source) {
+               efree((char *)dbh->data_source);
+       }
+       if (dbh->username) {
+               efree(dbh->username);
+       }
+       if (dbh->password) {
+               efree(dbh->password);
+       }
+
        efree(dbh);
 }
 
index 95ceff294de64650158adc82512087a1066021e8..334bf2e016aba521704497e08a075f9051c73597 100644 (file)
@@ -83,14 +83,17 @@ static int pdo_pgsql_fetch_error_func(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *in
 static int pgsql_handle_closer(pdo_dbh_t *dbh TSRMLS_DC) /* {{{ */
 {
        pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data;
-
-       if (H->server) {
-               PQfinish(H->server);
-               H->server = NULL;
-       }
-       if (H->einfo.errmsg) {
-               efree(H->einfo.errmsg);
-               H->einfo.errmsg = NULL;
+       if (H) {
+               if (H->server) {
+                       PQfinish(H->server);
+                       H->server = NULL;
+               }
+               if (H->einfo.errmsg) {
+                       efree(H->einfo.errmsg);
+                       H->einfo.errmsg = NULL;
+               }
+               pefree(H, dbh->is_persistent);
+               H = NULL;
        }
        return 0;
 }