andrey Wed Feb 20 15:18:18 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/ext/mysqlnd mysqlnd_debug.c mysqlnd_result.c mysqlnd_wireprotocol.c mysqlnd_wireprotocol.h Log: Fix memory leak http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_debug.c?r1=1.1.2.7&r2=1.1.2.8&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_debug.c diff -u php-src/ext/mysqlnd/mysqlnd_debug.c:1.1.2.7 php-src/ext/mysqlnd/mysqlnd_debug.c:1.1.2.8 --- php-src/ext/mysqlnd/mysqlnd_debug.c:1.1.2.7 Thu Feb 14 15:20:49 2008 +++ php-src/ext/mysqlnd/mysqlnd_debug.c Wed Feb 20 15:18:17 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_debug.c,v 1.1.2.7 2008/02/14 15:20:49 andrey Exp $ */ +/* $Id: mysqlnd_debug.c,v 1.1.2.8 2008/02/20 15:18:17 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" @@ -303,7 +303,9 @@ unsigned int line, const char * const file, char * func_name, uint func_name_len) { +#ifdef MYSQLND_THREADED MYSQLND_ZTS(self); +#endif if ((self->flags & MYSQLND_DEBUG_DUMP_TRACE) == 0 || self->file_name == NULL) { return FALSE; } @@ -349,8 +351,9 @@ const char * const file) { char *func_name; +#ifdef MYSQLND_THREADED MYSQLND_ZTS(self); - +#endif if ((self->flags & MYSQLND_DEBUG_DUMP_TRACE) == 0 || self->file_name == NULL) { return PASS; } http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_result.c?r1=1.4.2.15&r2=1.4.2.16&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_result.c diff -u php-src/ext/mysqlnd/mysqlnd_result.c:1.4.2.15 php-src/ext/mysqlnd/mysqlnd_result.c:1.4.2.16 --- php-src/ext/mysqlnd/mysqlnd_result.c:1.4.2.15 Thu Feb 14 12:49:30 2008 +++ php-src/ext/mysqlnd/mysqlnd_result.c Wed Feb 20 15:18:17 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_result.c,v 1.4.2.15 2008/02/14 12:49:30 andrey Exp $ */ +/* $Id: mysqlnd_result.c,v 1.4.2.16 2008/02/20 15:18:17 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.4.2.10&r2=1.4.2.11&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_wireprotocol.c diff -u php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.4.2.10 php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.4.2.11 --- php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.4.2.10 Thu Feb 14 14:50:21 2008 +++ php-src/ext/mysqlnd/mysqlnd_wireprotocol.c Wed Feb 20 15:18:17 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.4.2.8&r2=1.4.2.9&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_wireprotocol.h diff -u php-src/ext/mysqlnd/mysqlnd_wireprotocol.h:1.4.2.8 php-src/ext/mysqlnd/mysqlnd_wireprotocol.h:1.4.2.9 --- php-src/ext/mysqlnd/mysqlnd_wireprotocol.h:1.4.2.8 Thu Feb 14 12:49:30 2008 +++ php-src/ext/mysqlnd/mysqlnd_wireprotocol.h Wed Feb 20 15:18:17 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_wireprotocol.h,v 1.4.2.8 2008/02/14 12:49:30 andrey Exp $ */ +/* $Id: mysqlnd_wireprotocol.h,v 1.4.2.9 2008/02/20 15:18:17 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