summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2008-02-20 15:18:17 +0000
committerAndrey Hristov <andrey@php.net>2008-02-20 15:18:17 +0000
commit7d0cee8c80199a3503e774c0df3c898954ff87eb (patch)
treef69cd1f20c5bb7f96943c05efb992ad68b846a50
parent21324e9a69877622e4ad990a2889634cb4707860 (diff)
downloadphp-git-7d0cee8c80199a3503e774c0df3c898954ff87eb.tar.gz
Fix memory leak
-rw-r--r--ext/mysqlnd/mysqlnd_debug.c5
-rw-r--r--ext/mysqlnd/mysqlnd_result.c12
-rw-r--r--ext/mysqlnd/mysqlnd_wireprotocol.c3
-rw-r--r--ext/mysqlnd/mysqlnd_wireprotocol.h2
4 files changed, 15 insertions, 7 deletions
diff --git a/ext/mysqlnd/mysqlnd_debug.c b/ext/mysqlnd/mysqlnd_debug.c
index a6b0ebaa71..67c01c31a3 100644
--- a/ext/mysqlnd/mysqlnd_debug.c
+++ b/ext/mysqlnd/mysqlnd_debug.c
@@ -303,7 +303,9 @@ MYSQLND_METHOD(mysqlnd_debug, func_enter)(MYSQLND_DEBUG * self,
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 @@ MYSQLND_METHOD(mysqlnd_debug, func_leave)(MYSQLND_DEBUG * self, unsigned int lin
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;
}
diff --git a/ext/mysqlnd/mysqlnd_result.c b/ext/mysqlnd/mysqlnd_result.c
index 135216a19e..f987ffba65 100644
--- a/ext/mysqlnd/mysqlnd_result.c
+++ b/ext/mysqlnd/mysqlnd_result.c
@@ -336,6 +336,12 @@ MYSQLND_METHOD(mysqlnd_res, free_result_buffers)(MYSQLND_RES *result TSRMLS_DC)
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 @@ void mysqlnd_internal_free_result_contents(MYSQLND_RES *result TSRMLS_DC)
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;
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c
index c030d711f9..722d519021 100644
--- a/ext/mysqlnd/mysqlnd_wireprotocol.c
+++ b/ext/mysqlnd/mysqlnd_wireprotocol.c
@@ -1672,11 +1672,13 @@ end:
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 @@ void php_mysqlnd_rowp_free_mem(void *_packet, zend_bool alloca TSRMLS_DC)
if (!alloca) {
mnd_pefree(p, p->header.persistent);
}
+ DBG_VOID_RETURN;
}
/* }}} */
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.h b/ext/mysqlnd/mysqlnd_wireprotocol.h
index ca2a4640e3..d27baac85b 100644
--- a/ext/mysqlnd/mysqlnd_wireprotocol.h
+++ b/ext/mysqlnd/mysqlnd_wireprotocol.h
@@ -42,11 +42,13 @@ extern char * mysqlnd_read_body_name;
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);