andrey Wed Feb 20 15:20:14 2008 UTC Modified files: /php-src/ext/mysqlnd mysqlnd_result.c mysqlnd_wireprotocol.c mysqlnd_wireprotocol.h Log: Fix memory leak http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_result.c?r1=1.18&r2=1.19&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_result.c diff -u php-src/ext/mysqlnd/mysqlnd_result.c:1.18 php-src/ext/mysqlnd/mysqlnd_result.c:1.19 --- php-src/ext/mysqlnd/mysqlnd_result.c:1.18 Thu Feb 14 12:51:00 2008 +++ php-src/ext/mysqlnd/mysqlnd_result.c Wed Feb 20 15:20:14 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_result.c,v 1.18 2008/02/14 12:51:00 andrey Exp $ */ +/* $Id: mysqlnd_result.c,v 1.19 2008/02/20 15:20:14 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_wireprotocol.h" @@ -336,6 +336,12 @@ result->lengths = NULL; } + if (result->row_packet) { + DBG_INF("Freeing packet"); + PACKET_FREE(result->row_packet); + result->row_packet = NULL; + } + DBG_VOID_RETURN; } /* }}} */ @@ -349,12 +355,6 @@ result->m.free_result_buffers(result TSRMLS_CC); - if (result->row_packet) { - DBG_INF("Freeing packet"); - PACKET_FREE(result->row_packet); - result->row_packet = NULL; - } - if (result->meta) { result->meta->m->free_metadata(result->meta, FALSE TSRMLS_CC); result->meta = NULL; http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_wireprotocol.c?r1=1.12&r2=1.13&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_wireprotocol.c diff -u php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.12 php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.13 --- php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.12 Thu Feb 14 14:48:57 2008 +++ php-src/ext/mysqlnd/mysqlnd_wireprotocol.c Wed Feb 20 15:20:14 2008 @@ -1672,11 +1672,13 @@ static void php_mysqlnd_rowp_free_mem(void *_packet, zend_bool alloca TSRMLS_DC) { + DBG_ENTER("php_mysqlnd_rowp_free_mem"); php_mysql_packet_row *p= (php_mysql_packet_row *) _packet; if (p->row_buffer) { p->row_buffer->free_chunk(p->row_buffer, TRUE TSRMLS_CC); p->row_buffer = NULL; } + DBG_INF_FMT("alloca=%d persistent=%d", (int)alloca, (int)p->header.persistent); /* Don't free packet->fields : - normal queries -> store_result() | fetch_row_unbuffered() will transfer @@ -1687,6 +1689,7 @@ if (!alloca) { mnd_pefree(p, p->header.persistent); } + DBG_VOID_RETURN; } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_wireprotocol.h?r1=1.9&r2=1.10&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_wireprotocol.h diff -u php-src/ext/mysqlnd/mysqlnd_wireprotocol.h:1.9 php-src/ext/mysqlnd/mysqlnd_wireprotocol.h:1.10 --- php-src/ext/mysqlnd/mysqlnd_wireprotocol.h:1.9 Thu Feb 14 12:51:00 2008 +++ php-src/ext/mysqlnd/mysqlnd_wireprotocol.h Wed Feb 20 15:20:14 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_wireprotocol.h,v 1.9 2008/02/14 12:51:00 andrey Exp $ */ +/* $Id: mysqlnd_wireprotocol.h,v 1.10 2008/02/20 15:20:14 andrey Exp $ */ #ifndef MYSQLND_WIREPROTOCOL_H #define MYSQLND_WIREPROTOCOL_H @@ -42,11 +42,13 @@ packet = (c_type) pecalloc(1, packet_methods[(enum_type)].struct_size, (pers)); \ ((c_type) (packet))->header.m = &packet_methods[(enum_type)]; \ ((c_type) (packet))->header.persistent = (pers); \ + DBG_INF_FMT("PACKET_INIT(%p, %d, %d)", packet, (int) enum_type, (int) pers); \ } #define PACKET_WRITE(packet, conn) ((packet)->header.m->write_to_net((packet), (conn) TSRMLS_CC)) #define PACKET_READ(packet, conn) ((packet)->header.m->read_from_net((packet), (conn) TSRMLS_CC)) #define PACKET_FREE(packet) \ do { \ + DBG_INF_FMT("PACKET_FREE(%p)", packet); \ ((packet)->header.m->free_mem((packet), FALSE TSRMLS_CC)); \ } while (0);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php