]> granicus.if.org Git - php/commitdiff
free data in case of failure in the callee not in the caller
authorAndrey Hristov <andrey@php.net>
Tue, 5 Jul 2011 20:31:53 +0000 (20:31 +0000)
committerAndrey Hristov <andrey@php.net>
Tue, 5 Jul 2011 20:31:53 +0000 (20:31 +0000)
ext/mysqlnd/mysqlnd.c

index a927018dd188ed103c425e2cbf0bdd33f21b78fc..e6072e3201277d992b6fc84d7029d55303757c84 100644 (file)
@@ -157,6 +157,7 @@ MYSQLND_METHOD(mysqlnd_conn, free_contents)(MYSQLND * conn TSRMLS_DC)
                mnd_pefree(conn->unix_socket, pers);
                conn->unix_socket = NULL;
        }
+       DBG_INF_FMT("scheme=%s", conn->scheme);
        if (conn->scheme) {
                mnd_pefree(conn->scheme, pers);
                conn->scheme = NULL;
@@ -717,7 +718,7 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND * conn,
                        SET_OOM_ERROR(conn->error_info);
                        goto err; /* OOM */
                }
-               DBG_INF_FMT("transport=%s", transport);
+               DBG_INF_FMT("transport=%s conn->scheme=%s", transport, conn->scheme);
                conn->scheme = mnd_pestrndup(transport, transport_len, conn->persistent);
                conn->scheme_len = transport_len;
                mnd_sprintf_free(transport);
@@ -936,7 +937,7 @@ err:
                /* no mnd_ since we don't allocate it */
                efree(errstr);
        }
-
+       conn->m->free_contents(conn TSRMLS_CC);
        MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_CONNECT_FAILURE);
 
        DBG_RETURN(FAIL);
@@ -977,9 +978,6 @@ PHPAPI MYSQLND * mysqlnd_connect(MYSQLND * conn,
                          object - we are free to kill it!
                        */
                        conn->m->dtor(conn TSRMLS_CC);
-               } else {
-                       /* This will also close conn->net->stream if it has been opened */
-                       conn->m->free_contents(conn TSRMLS_CC);
                }
                DBG_RETURN(NULL);
        }