List:Commits« Previous MessageNext Message »
From:ahristov Date:August 22 2007 5:59pm
Subject:PHP mysqlnd svn commit: r942 - trunk/mysqlnd
View as plain text  
Author: ahristov
Date: 2007-08-22 19:59:11 +0200 (Wed, 22 Aug 2007)
New Revision: 942

Modified:
   trunk/mysqlnd/mysqlnd.c
   trunk/mysqlnd/mysqlnd_debug.c
   trunk/mysqlnd/mysqlnd_debug.h
   trunk/mysqlnd/mysqlnd_loaddata.c
   trunk/mysqlnd/mysqlnd_palloc.c
   trunk/mysqlnd/mysqlnd_ps.c
   trunk/mysqlnd/mysqlnd_ps_codec.c
   trunk/mysqlnd/mysqlnd_result.c
   trunk/mysqlnd/mysqlnd_result_meta.c
   trunk/mysqlnd/mysqlnd_wireprotocol.c
Log:
Enable tracing of memory allocations. One step is to
enable mysqlnd to track the memory it has allocated and
how many calls to different allocation functions have
been performed.


Modified: trunk/mysqlnd/mysqlnd.c
===================================================================
--- trunk/mysqlnd/mysqlnd.c	2007-08-22 14:59:54 UTC (rev 941)
+++ trunk/mysqlnd/mysqlnd.c	2007-08-22 17:59:11 UTC (rev 942)
@@ -77,7 +77,7 @@
 		mysqlnd_library_initted = TRUE;
 		_mysqlnd_init_ps_subsystem();
 		if (collect_statistics) {
-			mysqlnd_global_stats = calloc(1, sizeof(MYSQLND_STATS));
+			mysqlnd_global_stats = mnd_calloc(1, sizeof(MYSQLND_STATS));
 		
 #ifdef ZTS
 			mysqlnd_global_stats->LOCK_access = tsrm_mutex_alloc();
@@ -97,7 +97,7 @@
 #ifdef ZTS
 			tsrm_mutex_free(mysqlnd_global_stats->LOCK_access);
 #endif
-			free(mysqlnd_global_stats);
+			mnd_free(mysqlnd_global_stats);
 			mysqlnd_global_stats = NULL;
 		}
 		mysqlnd_library_initted = FALSE;
@@ -117,7 +117,7 @@
 	mysqlnd_local_infile_default(conn, TRUE);
 	if (conn->current_result) {
 		conn->current_result->m.free_result_contents(conn->current_result TSRMLS_CC);
-		efree(conn->current_result);
+		mnd_efree(conn->current_result);
 		conn->current_result = NULL;
 	}
 
@@ -134,79 +134,87 @@
 
 	DBG_INF("Freeing memory of members");
 	if (conn->host) {
-		pefree(conn->host, pers);
+		DBG_INF("Freeing host");
+		mnd_pefree(conn->host, pers);
 		conn->host = NULL;
 	}
 	if (conn->user) {
-		pefree(conn->user, pers);
+		DBG_INF("Freeing user");
+		mnd_pefree(conn->user, pers);
 		conn->user = NULL;
 	}
 	if (conn->passwd) {
-		pefree(conn->passwd, pers);
+		DBG_INF("Freeing passwd");
+		mnd_pefree(conn->passwd, pers);
 		conn->passwd = NULL;
 	}
 	if (conn->unix_socket) {
-		pefree(conn->unix_socket, pers);
+		DBG_INF("Freeing unix_socket");
+		mnd_pefree(conn->unix_socket, pers);
 		conn->unix_socket = NULL;
 	}
 	if (conn->scheme) {
-		pefree(conn->scheme, pers);
+		DBG_INF("Freeing scheme");
+		mnd_pefree(conn->scheme, pers);
 		conn->scheme = NULL;
 	}
 	if (conn->server_version) {
-		pefree(conn->server_version, pers);
+		DBG_INF("Freeing server_version");
+		mnd_pefree(conn->server_version, pers);
 		conn->server_version = NULL;
 	}
 	if (conn->host_info) {
-		pefree(conn->host_info, pers);
+		DBG_INF("Freeing host_info");
+		mnd_pefree(conn->host_info, pers);
 		conn->host_info = NULL;
 	}
 	if (conn->scramble) {
-		pefree(conn->scramble, pers);
+		DBG_INF("Freeing scramble");
+		mnd_pefree(conn->scramble, pers);
 		conn->scramble = NULL;
 	}
 	if (conn->last_message) {
-		pefree(conn->last_message, pers);
+		mnd_pefree(conn->last_message, pers);
 		conn->last_message = NULL;
 	}
 	if (conn->options.charset_name) {
-		pefree(conn->options.charset_name, pers);
+		mnd_pefree(conn->options.charset_name, pers);
 		conn->options.charset_name = NULL;
 	}
 	if (conn->options.num_commands) {
 		unsigned int i;
 		for (i=0; i < conn->options.num_commands; i++) {
-			pefree(conn->options.init_commands[i], pers);
+			mnd_pefree(conn->options.init_commands[i], pers);
 		}
-		pefree(conn->options.init_commands, pers);
+		mnd_pefree(conn->options.init_commands, pers);
 		conn->options.init_commands = NULL;
 	}
 	if (conn->options.cfg_file) {
-		pefree(conn->options.cfg_file, pers);
+		mnd_pefree(conn->options.cfg_file, pers);
 		conn->options.cfg_file = NULL;
 	}
 	if (conn->options.cfg_section) {
-		pefree(conn->options.cfg_section, pers);
+		mnd_pefree(conn->options.cfg_section, pers);
 		conn->options.cfg_section = NULL;
 	}
 	if (conn->options.ssl_key) {
-		pefree(conn->options.ssl_key, pers);
+		mnd_pefree(conn->options.ssl_key, pers);
 		conn->options.ssl_key = NULL;
 	}
 	if (conn->options.ssl_cert) {
-		pefree(conn->options.ssl_cert, pers);
+		mnd_pefree(conn->options.ssl_cert, pers);
 		conn->options.ssl_cert = NULL;
 	}
 	if (conn->options.ssl_ca) {
-		pefree(conn->options.ssl_ca, pers);
+		mnd_pefree(conn->options.ssl_ca, pers);
 		conn->options.ssl_ca = NULL;
 	}
 	if (conn->options.ssl_capath) {
-		pefree(conn->options.ssl_capath, pers);
+		mnd_pefree(conn->options.ssl_capath, pers);
 		conn->options.ssl_capath = NULL;
 	}
 	if (conn->options.ssl_cipher) {
-		pefree(conn->options.ssl_cipher, pers);
+		mnd_pefree(conn->options.ssl_cipher, pers);
 		conn->options.ssl_cipher = NULL;
 	}
 	if (conn->zval_cache) {
@@ -221,7 +229,7 @@
 	}
 	if (conn->net.cmd_buffer.buffer) {
 		DBG_INF("Freeing cmd buffer");
-		pefree(conn->net.cmd_buffer.buffer, pers);
+		mnd_pefree(conn->net.cmd_buffer.buffer, pers);
 		conn->net.cmd_buffer.buffer = NULL;
 	}
 	conn->charset = NULL;
@@ -241,7 +249,7 @@
 
 	conn->m->free_contents(conn TSRMLS_CC);
 
-	pefree(conn, conn->persistent);
+	mnd_pefree(conn, conn->persistent);
 
 	DBG_VOID_RETURN;
 }
@@ -430,7 +438,7 @@
 	MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_CONNECT_REUSED);
 	/* Free here what should not be seen by the next script */
 	if (conn->last_message) {
-		pefree(conn->last_message, conn->persistent);
+		mnd_pefree(conn->last_message, conn->persistent);
 		conn->last_message = NULL;
 	}
 }
@@ -548,7 +556,7 @@
 	}
 	if (conn->persistent) {
 		conn->scheme = pestrndup(transport, transport_len, 1);
-		efree(transport);
+		mnd_efree(transport);
 	} else {
 		conn->scheme = transport;
 	}
@@ -582,7 +590,7 @@
 		/* Shut-up the streams, they don't know what they are doing */
 		conn->net.stream->__exposed = 1;
 #endif
-		efree(hashed_details);
+		mnd_efree(hashed_details);
 	}
 
 	if (errstr || !conn->net.stream) {
@@ -648,7 +656,7 @@
 	auth_packet->max_packet_size= 3UL*1024UL*1024UL*1024UL;
 	auth_packet->client_flags= mysql_flags;
 
-	conn->scramble = auth_packet->server_scramble_buf = pemalloc(SCRAMBLE_LENGTH,
conn->persistent);
+	conn->scramble = auth_packet->server_scramble_buf = mnd_pemalloc(SCRAMBLE_LENGTH,
conn->persistent);
 	memcpy(auth_packet->server_scramble_buf, greet_packet.scramble_buf, SCRAMBLE_LENGTH);
 	if (!PACKET_WRITE(auth_packet, conn)) {
 		conn->state = CONN_QUIT_SENT;
@@ -687,7 +695,7 @@
 			spprintf(&p, 0, "MySQL host info: %s via TCP/IP", conn->host);
 			if (conn->persistent) {
 				conn->host_info = pestrdup(p, 1);
-				efree(p);
+				mnd_efree(p);
 			} else {
 				conn->host_info = p;
 			}
@@ -715,7 +723,7 @@
 
 		conn->zval_cache = mysqlnd_palloc_get_thd_cache_reference(zval_cache);
 		conn->net.cmd_buffer.length = 128L*1024L;
-		conn->net.cmd_buffer.buffer = pemalloc(conn->net.cmd_buffer.length,
conn->persistent);
+		conn->net.cmd_buffer.buffer = mnd_pemalloc(conn->net.cmd_buffer.length,
conn->persistent);
 
 		MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_CONNECT_SUCCESS);
 		if (reconnect) {
@@ -747,10 +755,10 @@
 
 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "[%d] %.64s (trying to connect via %s)",
errcode, errstr, conn->scheme);
 
-		efree(errstr);
+		mnd_efree(errstr);
 	}
 	if (conn->scheme) {
-		pefree(conn->scheme, conn->persistent);
+		mnd_pefree(conn->scheme, conn->persistent);
 		conn->scheme = NULL;
 	}
 
@@ -851,7 +859,7 @@
 
 	result->type = MYSQLND_RES_NORMAL;
 	result->m.fetch_row = result->m.fetch_row_normal_unbuffered;
-	result->unbuf = ecalloc(1, sizeof(MYSQLND_RES_UNBUFFERED));
+	result->unbuf = mnd_ecalloc(1, sizeof(MYSQLND_RES_UNBUFFERED));
 	result->unbuf->eof_reached = TRUE;
 
 	DBG_RETURN(result);
@@ -889,7 +897,7 @@
 		result = conn->m->store_result(conn TSRMLS_CC);
 	}
 	if (show_query != query) {
-		efree(show_query);
+		mnd_efree(show_query);
 	}
 	DBG_RETURN(result);
 }
@@ -1090,7 +1098,7 @@
 	} else {
 		conn->charset = charset;
 	}
-	efree(query);
+	mnd_efree(query);
 
 	DBG_INF(ret == PASS? "PASS":"FAIL");
 	DBG_RETURN(ret);
@@ -1551,12 +1559,12 @@
 		}
 	}
 	if (ret == PASS) {
-		pefree(conn->user, conn->persistent);
+		mnd_pefree(conn->user, conn->persistent);
 		conn->user = pestrndup(user, user_len, conn->persistent);
-		pefree(conn->passwd, conn->persistent);
+		mnd_pefree(conn->passwd, conn->persistent);
 		conn->passwd = pestrdup(passwd, conn->persistent);
 		if (conn->last_message) {
-			pefree(conn->last_message, conn->persistent);
+			mnd_pefree(conn->last_message, conn->persistent);
 			conn->last_message = NULL;
 		}
 		conn->charset = conn->greet_charset;
@@ -1795,7 +1803,7 @@
 /* {{{ mysqlnd_init */
 PHPAPI MYSQLND *_mysqlnd_init(zend_bool persistent TSRMLS_DC)
 {
-	MYSQLND *ret = pecalloc(1, sizeof(MYSQLND), persistent);
+	MYSQLND *ret = mnd_pecalloc(1, sizeof(MYSQLND), persistent);
 
 	DBG_ENTER("mysqlnd_init");
 	DBG_INF_FMT("persistent=%d", persistent);
@@ -1848,7 +1856,7 @@
 				php_info_print_table_row(2, s, Z_STRVAL_PP(values_entry));
 			}
 			if (s) {
-				efree(s);
+				mnd_efree(s);
 			}
 		} else {
 			php_info_print_table_row(2, string_key.s, Z_STRVAL_PP(values_entry));

Modified: trunk/mysqlnd/mysqlnd_debug.c
===================================================================
--- trunk/mysqlnd/mysqlnd_debug.c	2007-08-22 14:59:54 UTC (rev 941)
+++ trunk/mysqlnd/mysqlnd_debug.c	2007-08-22 17:59:11 UTC (rev 942)
@@ -432,6 +432,188 @@
 #endif
 }
 
+
+void * _mysqlnd_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
+{
+	void *ret;
+	TSRMLS_FETCH();
+	DBG_ENTER("mysqlnd_emalloc");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("before: %lu", zend_memory_usage(FALSE TSRMLS_CC));
+	ret = emalloc(size);
+	DBG_INF_FMT("after : %lu", zend_memory_usage(FALSE TSRMLS_CC));
+	DBG_INF_FMT("size=%lu ptr=%p", size, ret); 
+	DBG_RETURN(ret);
+}
+
+void * _mysqlnd_pemalloc(size_t size, zend_bool persistent ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC)
+{
+	void *ret;
+	TSRMLS_FETCH();
+	DBG_ENTER("mysqlnd_pemalloc");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("before: %lu", zend_memory_usage(persistent TSRMLS_CC));
+
+	ret = pemalloc(size, persistent);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(persistent TSRMLS_CC));
+	DBG_INF_FMT("size=%lu ptr=%p persistent=%d", size, ret, persistent); 
+	DBG_RETURN(ret);
+}
+
+void * _mysqlnd_ecalloc(uint nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
+{
+	void *ret;
+	TSRMLS_FETCH();
+	DBG_ENTER("_mysqlnd_calloc");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("before: %lu", zend_memory_usage(FALSE TSRMLS_CC));
+
+	ret = ecalloc(nmemb, size);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(FALSE TSRMLS_CC));
+	DBG_INF_FMT("size=%lu ptr=%p", size, ret); 
+	DBG_RETURN(ret);
+}
+
+void * _mysqlnd_pecalloc(uint nmemb, size_t size, zend_bool persistent ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC)
+{
+	void *ret;
+	TSRMLS_FETCH();
+	DBG_ENTER("_mysqlnd_calloc");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("before: %lu", zend_memory_usage(persistent TSRMLS_CC));
+
+	ret = pecalloc(nmemb, size, persistent);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(persistent TSRMLS_CC));
+	DBG_INF_FMT("size=%lu ptr=%p", size, ret); 
+	DBG_RETURN(ret);
+}
+
+void * _mysqlnd_erealloc(void *ptr, size_t new_size ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC)
+{
+	void *ret;
+	TSRMLS_FETCH();
+	DBG_ENTER("mysqlnd_erealloc");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("ptr=%p new_size=%lu", ptr, new_size); 
+	DBG_INF_FMT("before: %lu", zend_memory_usage(FALSE TSRMLS_CC));
+
+	ret = erealloc(ptr, new_size);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(FALSE TSRMLS_CC));
+	DBG_INF_FMT("new_ptr=%p", ret); 
+	DBG_RETURN(ret);
+}
+
+void * _mysqlnd_perealloc(void *ptr, size_t new_size, zend_bool persistent
ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
+{
+	void *ret;
+	TSRMLS_FETCH();
+	DBG_ENTER("mysqlnd_erealloc");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("ptr=%p new_size=%lu persist=%d", ptr, new_size, persistent); 
+	DBG_INF_FMT("before: %lu", zend_memory_usage(persistent TSRMLS_CC));
+
+	ret = perealloc(ptr, new_size, persistent);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(persistent TSRMLS_CC));
+	DBG_INF_FMT("new_ptr=%p", ret); 
+	DBG_RETURN(ret);
+}
+
+void _mysqlnd_efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
+{
+	TSRMLS_FETCH();
+	DBG_ENTER("mysqlnd_efree");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("ptr=%p", ptr); 
+	DBG_INF_FMT("before: %lu", zend_memory_usage(FALSE TSRMLS_CC));
+
+	efree(ptr);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(FALSE TSRMLS_CC));
+	DBG_VOID_RETURN;
+}
+
+void _mysqlnd_pefree(void *ptr, zend_bool persistent ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC)
+{
+	TSRMLS_FETCH();
+	DBG_ENTER("mysqlnd_efree");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("ptr=%p persistent=%d", ptr, persistent); 
+	DBG_INF_FMT("before: %lu", zend_memory_usage(persistent TSRMLS_CC));
+
+	pefree(ptr, persistent);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(persistent TSRMLS_CC));
+	DBG_VOID_RETURN;
+}
+
+
+void * _mysqlnd_malloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
+{
+	void *ret;
+	TSRMLS_FETCH();
+	DBG_ENTER("mysqlnd_malloc");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("before: %lu", zend_memory_usage(TRUE TSRMLS_CC));
+
+	ret = malloc(size);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(TRUE TSRMLS_CC));
+	DBG_INF_FMT("size=%lu ptr=%p", size, ret); 
+	DBG_RETURN(ret);
+}
+
+void * _mysqlnd_calloc(uint nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
+{
+	void *ret;
+	TSRMLS_FETCH();
+	DBG_ENTER("_mysqlnd_calloc");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("before: %lu", zend_memory_usage(TRUE TSRMLS_CC));
+
+	ret = calloc(nmemb, size);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(TRUE TSRMLS_CC));
+	DBG_INF_FMT("size=%lu ptr=%p", size, ret); 
+	DBG_RETURN(ret);
+}
+
+
+void * _mysqlnd_realloc(void *ptr, size_t new_size ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC)
+{
+	void *ret;
+	TSRMLS_FETCH();
+	DBG_ENTER("mysqlnd_realloc");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("ptr=%p new_size=%lu ", new_size, ptr); 
+	DBG_INF_FMT("before: %lu", zend_memory_usage(TRUE TSRMLS_CC));
+
+	ret = realloc(ptr, new_size);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(TRUE TSRMLS_CC));
+	DBG_INF_FMT("new_ptr=%p", ret); 
+	DBG_RETURN(ret);
+}
+
+void _mysqlnd_free(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
+{
+	TSRMLS_FETCH();
+	DBG_ENTER("mysqlnd_free");
+	DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1,
__zend_lineno);
+	DBG_INF_FMT("ptr=%p", ptr); 
+	DBG_INF_FMT("before: %lu", zend_memory_usage(TRUE TSRMLS_CC));
+
+	free(ptr);
+
+	DBG_INF_FMT("after : %lu", zend_memory_usage(TRUE TSRMLS_CC));
+	DBG_VOID_RETURN;
+}
+
+
 /*
  * Local variables:
  * tab-width: 4

Modified: trunk/mysqlnd/mysqlnd_debug.h
===================================================================
--- trunk/mysqlnd/mysqlnd_debug.h	2007-08-22 14:59:54 UTC (rev 941)
+++ trunk/mysqlnd/mysqlnd_debug.h	2007-08-22 17:59:11 UTC (rev 942)
@@ -25,6 +25,8 @@
 
 #include "zend_stack.h"
 
+#define MYSQLND_DEBUG_MEMORY 0
+
 struct st_mysqlnd_debug_methods
 {
 	enum_func_status (*open)(MYSQLND_DEBUG *self, zend_bool reopen);
@@ -57,6 +59,20 @@
 
 MYSQLND_DEBUG *mysqlnd_debug_init(TSRMLS_D);
 
+
+void *	_mysqlnd_emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
+void *	_mysqlnd_pemalloc(size_t size, zend_bool persistent ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC);
+void *	_mysqlnd_ecalloc(uint nmemb, size_t size ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC);
+void *	_mysqlnd_pecalloc(uint nmemb, size_t size, zend_bool persistent ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC);
+void *	_mysqlnd_erealloc(void *ptr, size_t new_size ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC);
+void *	_mysqlnd_perealloc(void *ptr, size_t new_size, zend_bool persistent
ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
+void 	_mysqlnd_efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
+void 	_mysqlnd_pefree(void *ptr, zend_bool persistent ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC);
+void *	_mysqlnd_malloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
+void *	_mysqlnd_calloc(uint nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
+void *	_mysqlnd_realloc(void *ptr, size_t new_size ZEND_FILE_LINE_DC
ZEND_FILE_LINE_ORIG_DC);
+void	_mysqlnd_free(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
+
 #if PHP_DEBUG && !defined(PHP_WIN32)
 #define DBG_INF(msg) do { if(MYSQLND_G(dbg)) MYSQLND_G(dbg)->m->log(MYSQLND_G(dbg),
__LINE__, __FILE__, -1, "info : ", (msg)); } while (0)
 #define DBG_ERR(msg) do { if(MYSQLND_G(dbg)) MYSQLND_G(dbg)->m->log(MYSQLND_G(dbg),
__LINE__, __FILE__, -1, "error: ", (msg)); } while (0)
@@ -67,6 +83,8 @@
 #define DBG_RETURN(value)	do { if(MYSQLND_G(dbg))
MYSQLND_G(dbg)->m->func_leave(MYSQLND_G(dbg), __LINE__, __FILE__); return (value);
} while (0)
 #define DBG_VOID_RETURN		do { if(MYSQLND_G(dbg))
MYSQLND_G(dbg)->m->func_leave(MYSQLND_G(dbg), __LINE__, __FILE__); return; } while
(0)
 
+
+
 #else
 #define DBG_INF(msg)
 #define DBG_ERR(msg)
@@ -77,7 +95,38 @@
 #define DBG_RETURN(value)	return (value)
 #define DBG_VOID_RETURN		return;
 
+#endif
 
+#if MYSQLND_DEBUG_MEMORY
+
+#define mnd_emalloc(size)				_mysqlnd_emalloc((size) ZEND_FILE_LINE_CC
ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_pemalloc(size, pers)		_mysqlnd_pemalloc((size), (pers) ZEND_FILE_LINE_CC
ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_ecalloc(nmemb, size)		_mysqlnd_ecalloc((nmemb), (size) ZEND_FILE_LINE_CC
ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_pecalloc(nmemb, size, p)	_mysqlnd_pecalloc((nmemb), (size), (p)
ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_erealloc(ptr, new_size)		_mysqlnd_erealloc((ptr), (new_size)
ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_perealloc(ptr, new_size, p)	_mysqlnd_perealloc((ptr), (new_size), (p)
ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_efree(ptr)					_mysqlnd_efree((ptr) ZEND_FILE_LINE_CC
ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_pefree(ptr, pers)			_mysqlnd_pefree((ptr), (pers) ZEND_FILE_LINE_CC
ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_malloc(size)				_mysqlnd_malloc((size) ZEND_FILE_LINE_CC
ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_calloc(nmemb, size)			_mysqlnd_calloc((nmemb), (size) ZEND_FILE_LINE_CC
ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_realloc(ptr, new_size)		_mysqlnd_realloc((ptr), (new_size) ZEND_FILE_LINE_CC
ZEND_FILE_LINE_EMPTY_CC)
+#define mnd_free(ptr)					_mysqlnd_free((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)
+
+#else
+
+#define mnd_emalloc(size)				emalloc((size))
+#define mnd_pemalloc(size, pers)		pemalloc((size), (pers))
+#define mnd_ecalloc(nmemb, size)		ecalloc((nmemb), (size))
+#define mnd_pecalloc(nmemb, size, p)	pecalloc((nmemb), (size), (p))
+#define mnd_erealloc(ptr, new_size)		erealloc((ptr), (new_size))
+#define mnd_perealloc(ptr, new_size, p)	perealloc((ptr), (new_size), (p))
+#define mnd_efree(ptr)					efree((ptr))
+#define mnd_pefree(ptr, pers)			pefree((ptr), (pers))
+#define mnd_malloc(size)				malloc((size))
+#define mnd_calloc(nmemb, size)			calloc((nmemb), (size))
+#define mnd_realloc(ptr, new_size)		realloc((ptr), (new_size))
+#define mnd_free(ptr)					free((ptr))
+
 #endif
 
 #endif /* MYSQLND_DEBUG_H */

Modified: trunk/mysqlnd/mysqlnd_loaddata.c
===================================================================
--- trunk/mysqlnd/mysqlnd_loaddata.c	2007-08-22 14:59:54 UTC (rev 941)
+++ trunk/mysqlnd/mysqlnd_loaddata.c	2007-08-22 17:59:11 UTC (rev 942)
@@ -23,6 +23,7 @@
 #include "mysqlnd.h"
 #include "mysqlnd_wireprotocol.h"
 #include "mysqlnd_priv.h"
+#include "mysqlnd_debug.h"
 
 enum_func_status mysqlnd_simple_command_handle_response(MYSQLND *conn,
 										enum php_mysql_packet_type ok_packet,
@@ -34,7 +35,7 @@
 if (c) {\
 	a = (zval ***)safe_emalloc(c, sizeof(zval **), 0);\
 	for (i = b; i < c; i++) {\
-		a[i] = emalloc(sizeof(zval *));\
+		a[i] = mnd_emalloc(sizeof(zval *));\
 		MAKE_STD_ZVAL(*a[i]);\
 	}\
 }
@@ -43,9 +44,9 @@
 if (a) {\
 	for (i=b; i < c; i++) {\
 		zval_ptr_dtor(a[i]);\
-		efree(a[i]);\
+		mnd_efree(a[i]);\
 	}\
-	efree(a);\
+	mnd_efree(a);\
 }
 
 /* {{{ mysqlnd_local_infile_init */
@@ -55,7 +56,7 @@
 	MYSQLND_INFILE_INFO		*info;
 	php_stream_context 		*context = NULL;
 
-	*ptr= info= ((MYSQLND_INFILE_INFO *)ecalloc(1, sizeof(MYSQLND_INFILE_INFO)));
+	*ptr= info= ((MYSQLND_INFILE_INFO *)mnd_ecalloc(1, sizeof(MYSQLND_INFILE_INFO)));
 
 	/* check open_basedir */
 	if (PG(open_basedir)) {
@@ -157,7 +158,7 @@
 			rc = -1;
 		}
 
-		efree(fp);	
+		mnd_efree(fp);	
 		FREE_CALLBACK_ARGS(callback_args, 1, argc);
 		return rc;
 
@@ -195,7 +196,7 @@
 		if (info->fd) {
 			php_stream_close(info->fd);
 		}
-		efree(info);
+		mnd_efree(info);
 	}
 }
 /* }}} */
@@ -261,7 +262,7 @@
 
 	infile = conn->infile;
 	/* allocate buffer for reading data */
-	buf = (char *)ecalloc(1, buflen);
+	buf = (char *)mnd_ecalloc(1, buflen);
 	
 	*is_warning = FALSE;
 
@@ -319,7 +320,7 @@
 	}
 
 	(*conn->infile.local_infile_end)(info TSRMLS_CC);
-	efree(buf);
+	mnd_efree(buf);
 	return result;
 }
 /* }}} */

Modified: trunk/mysqlnd/mysqlnd_palloc.c
===================================================================
--- trunk/mysqlnd/mysqlnd_palloc.c	2007-08-22 14:59:54 UTC (rev 941)
+++ trunk/mysqlnd/mysqlnd_palloc.c	2007-08-22 17:59:11 UTC (rev 942)
@@ -117,9 +117,9 @@
 #endif
 
 	/* Data in pointed by 'block' was cleaned in RSHUTDOWN */
-	free(cache->block);
-	free(cache->free_list.ptr_line);
-	free(cache);
+	mnd_free(cache->block);
+	mnd_free(cache->free_list.ptr_line);
+	mnd_free(cache);
 }
 /* }}} */
 
@@ -176,8 +176,8 @@
 	php_printf("[mysqlnd_palloc_free_thd_cache %p]\n", cache);
 #endif
 
-	free(cache->gc_list.ptr_line);
-	free(cache);
+	mnd_free(cache->gc_list.ptr_line);
+	mnd_free(cache);
 }
 /* }}} */
 
@@ -291,7 +291,7 @@
 	void *ret = NULL;
 
 	DBG_ENTER("mysqlnd_palloc_get_zval");
-	DBG_INF_FMT("cache=%p *last_added=%p free_items=%d\n",
+	DBG_INF_FMT("cache=%p *last_added=%p free_items=%d",
 				thd_cache, thd_cache? thd_cache->parent->free_list.last_added:NULL,
 				thd_cache->parent->free_items);
 

Modified: trunk/mysqlnd/mysqlnd_ps.c
===================================================================
--- trunk/mysqlnd/mysqlnd_ps.c	2007-08-22 14:59:54 UTC (rev 941)
+++ trunk/mysqlnd/mysqlnd_ps.c	2007-08-22 17:59:11 UTC (rev 942)
@@ -123,7 +123,7 @@
 	} else {
 		conn->error_info = result->data->error_info;
 		stmt->result->m.free_result_contents(stmt->result TSRMLS_CC);
-		efree(stmt->result);
+		mnd_efree(stmt->result);
 		stmt->result = NULL;
 		stmt->state = MYSQLND_STMT_PREPARED;
 	}
@@ -261,7 +261,7 @@
 	if (FAIL == (ret = PACKET_READ_ALLOCA(fields_eof, stmt->conn))) {
 		if (stmt->result) {
 			stmt->result->m.free_result_contents(stmt->result TSRMLS_CC);
-			efree(stmt->result);
+			mnd_efree(stmt->result);
 			memset(stmt, 0, sizeof(MYSQLND_STMT));
 			stmt->state = MYSQLND_STMT_INITTED;
 		}
@@ -352,7 +352,7 @@
 		memcpy(stmt, stmt_to_prepare, sizeof(MYSQLND_STMT));
 
 		/* Now we will have a clean new statement object */
-		efree(stmt_to_prepare);
+		mnd_efree(stmt_to_prepare);
 	}
 	stmt->state = MYSQLND_STMT_PREPARED;
 	DBG_INF("PASS");
@@ -442,7 +442,7 @@
 								 FALSE TSRMLS_CC);
 
 	if (free_request) {
-		efree(request);
+		mnd_efree(request);
 	}
 
 	if (ret == FAIL) {
@@ -670,7 +670,7 @@
 			  the bound variables. Thus we need to do part of what it does or Zend will
 			  report leaks.
 			*/
-			efree(row_packet->row_buffer);
+			mnd_efree(row_packet->row_buffer);
 			row_packet->row_buffer = NULL;
 		}
 	} else if (ret == FAIL) {
@@ -738,7 +738,7 @@
 	result->m.fetch_lengths	= NULL; /* makes no sense */
 	result->zval_cache		= mysqlnd_palloc_get_thd_cache_reference(conn->zval_cache);
 
-	result->unbuf = ecalloc(1, sizeof(MYSQLND_RES_UNBUFFERED));
+	result->unbuf = mnd_ecalloc(1, sizeof(MYSQLND_RES_UNBUFFERED));
 
 	DBG_INF_FMT("cursor=%d zval_cache=%p", stmt->cursor_exists, result->zval_cache);
 	/*
@@ -848,7 +848,7 @@
 		/* We asked for one row, the next one should be EOF, eat it */
 		ret = PACKET_READ(row_packet, result->conn);
 		if (row_packet->row_buffer) {
-			efree(row_packet->row_buffer);
+			mnd_efree(row_packet->row_buffer);
 			row_packet->row_buffer = NULL;
 		}
 	} else {
@@ -1044,7 +1044,7 @@
 
 	if (conn->state == CONN_READY) {
 		stmt->param_bind[param_no].flags |= MYSQLND_PARAM_BIND_BLOB_USED;
-		cmd_buf = emalloc(packet_len = STMT_ID_LENGTH + 2 + length);
+		cmd_buf = mnd_emalloc(packet_len = STMT_ID_LENGTH + 2 + length);
 
 		int4store(cmd_buf, stmt->stmt_id);
 		int2store(cmd_buf + STMT_ID_LENGTH, param_no);
@@ -1053,7 +1053,7 @@
 		/* COM_STMT_SEND_LONG_DATA doesn't send an OK packet*/
 		ret = mysqlnd_simple_command(conn, cmd, (char *)cmd_buf, packet_len,
 									 PROT_LAST , FALSE TSRMLS_CC);
-		efree(cmd_buf);
+		mnd_efree(cmd_buf);
 		if (FAIL == ret) {
 			stmt->error_info = conn->error_info;
 		}
@@ -1137,7 +1137,7 @@
 					stmt->param_bind[i].zv = NULL;
 				}
 			}
-			efree(stmt->param_bind);
+			mnd_efree(stmt->param_bind);
 		}
 
 		stmt->param_bind = param_bind;
@@ -1177,7 +1177,7 @@
 	if (stmt->state < MYSQLND_STMT_PREPARED) {
 		SET_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, UNKNOWN_SQLSTATE, mysqlnd_stmt_not_prepared);
 		if (result_bind) {
-			efree(result_bind);
+			mnd_efree(result_bind);
 		}
 		DBG_ERR("not prepared");
 		DBG_RETURN(FAIL);
@@ -1203,7 +1203,7 @@
 			stmt->result_bind[i].bound = TRUE;
 		}
 	} else if (result_bind) {
-		efree(result_bind);
+		mnd_efree(result_bind);
 	}
 	DBG_INF("PASS");
 	DBG_RETURN(PASS);
@@ -1342,7 +1342,7 @@
 	result = mysqlnd_result_init(stmt->field_count, NULL TSRMLS_CC);
 	result->type = MYSQLND_RES_NORMAL;
 	result->m.fetch_row = result->m.fetch_row_normal_unbuffered;
-	result->unbuf = ecalloc(1, sizeof(MYSQLND_RES_UNBUFFERED));
+	result->unbuf = mnd_ecalloc(1, sizeof(MYSQLND_RES_UNBUFFERED));
 	result->unbuf->eof_reached = TRUE;
 	result->meta =
stmt->result->meta->m->clone_metadata(stmt->result->meta, FALSE
TSRMLS_CC);
 
@@ -1514,7 +1514,7 @@
 			}
 		}
 	}
-	efree(stmt->result_bind);
+	mnd_efree(stmt->result_bind);
 	stmt->result_bind = NULL;
 
 	DBG_VOID_RETURN;
@@ -1545,7 +1545,7 @@
 			}
 		}
 
-		efree(stmt->param_bind);
+		mnd_efree(stmt->param_bind);
 		stmt->param_bind = NULL;
 	}
 
@@ -1560,7 +1560,7 @@
 		stmt->result = NULL;
 	}
 	if (stmt->cmd_buffer.buffer) {
-		efree(stmt->cmd_buffer.buffer);
+		mnd_efree(stmt->cmd_buffer.buffer);
 		stmt->cmd_buffer.buffer = NULL;
 	}
 
@@ -1641,7 +1641,7 @@
 														STAT_STMT_CLOSE_EXPLICIT);
 
 	if (PASS == (ret = stmt->m->close(stmt, implicit TSRMLS_CC))) {
-		efree(stmt);
+		mnd_efree(stmt);
 	}
 
 	DBG_INF(ret == PASS? "PASS":"FAIL");
@@ -1691,7 +1691,7 @@
 /* {{{ _mysqlnd_stmt_init */
 MYSQLND_STMT * _mysqlnd_stmt_init(MYSQLND * const conn TSRMLS_DC)
 {
-	MYSQLND_STMT *stmt = ecalloc(1, sizeof(MYSQLND_STMT));
+	MYSQLND_STMT *stmt = mnd_ecalloc(1, sizeof(MYSQLND_STMT));
 
 	DBG_ENTER("_mysqlnd_stmt_init");
 	DBG_INF_FMT("stmt=%p", stmt); 
@@ -1699,7 +1699,7 @@
 	stmt->m = &mysqlnd_stmt_methods;
 	stmt->state = MYSQLND_STMT_INITTED;
 	stmt->cmd_buffer.length = 4096;
-	stmt->cmd_buffer.buffer = emalloc(stmt->cmd_buffer.length);
+	stmt->cmd_buffer.buffer = mnd_emalloc(stmt->cmd_buffer.length);
 
 	stmt->prefetch_rows = MYSQLND_DEFAULT_PREFETCH_ROWS;
 	/*

Modified: trunk/mysqlnd/mysqlnd_ps_codec.c
===================================================================
--- trunk/mysqlnd/mysqlnd_ps_codec.c	2007-08-22 14:59:54 UTC (rev 941)
+++ trunk/mysqlnd/mysqlnd_ps_codec.c	2007-08-22 17:59:11 UTC (rev 942)
@@ -23,8 +23,8 @@
 #include "mysqlnd.h"
 #include "mysqlnd_wireprotocol.h"
 #include "mysqlnd_priv.h"
+#include "mysqlnd_debug.h"
 
-
 #define MYSQLND_SILENT
 
 
@@ -205,7 +205,7 @@
 		if (uval > INT_MAX) {
 			char *tmp, *p;
 			int j=10;
-			tmp= emalloc(11);
+			tmp= mnd_emalloc(11);
 			p= &tmp[9];
 			do { 
 				*p-- = (uval % 10) + 48;
@@ -354,7 +354,7 @@
 	if (!as_unicode) {
 #endif
 		ZVAL_STRINGL(zv, to, length, 1);
-		efree(to);
+		mnd_efree(to);
 #if PHP_MAJOR_VERSION >= 6
 	} else {
 		ZVAL_UTF8_STRINGL(zv, to, length, ZSTR_AUTOFREE);	
@@ -402,7 +402,7 @@
 	if (!as_unicode) {
 #endif
 		ZVAL_STRINGL(zv, to, length, 1);
-		efree(to);
+		mnd_efree(to);
 #if PHP_MAJOR_VERSION >= 6
 	} else {
 		ZVAL_UTF8_STRINGL(zv, to, length, ZSTR_AUTOFREE);	
@@ -458,7 +458,7 @@
 	if (!as_unicode) {
 #endif
 		ZVAL_STRINGL(zv, to, length, 1);
-		efree(to);
+		mnd_efree(to);
 #if PHP_MAJOR_VERSION >= 6
 	} else {
 		ZVAL_UTF8_STRINGL(zv, to, length, ZSTR_AUTOFREE);	
@@ -667,7 +667,7 @@
 			unsigned int offset = *p - *buf;
 			zend_uchar *tmp_buf;
 			*buf_len = offset + stmt->param_count * 2 + 20;
-			tmp_buf = emalloc(*buf_len);
+			tmp_buf = mnd_emalloc(*buf_len);
 			memcpy(tmp_buf, *buf, offset);
 			*buf = tmp_buf;
 			
@@ -734,7 +734,7 @@
 		unsigned int offset = *p - *buf;
 		zend_uchar *tmp_buf;
 		*buf_len = offset + data_size + 10; /* Allocate + 10 for safety */
-		tmp_buf = emalloc(*buf_len);
+		tmp_buf = mnd_emalloc(*buf_len);
 		memcpy(tmp_buf, *buf, offset);
 		*buf = tmp_buf;
 		/* Update our pos pointer */

Modified: trunk/mysqlnd/mysqlnd_result.c
===================================================================
--- trunk/mysqlnd/mysqlnd_result.c	2007-08-22 14:59:54 UTC (rev 941)
+++ trunk/mysqlnd/mysqlnd_result.c	2007-08-22 17:59:11 UTC (rev 942)
@@ -87,7 +87,9 @@
 	unsigned int row;
 
 	DBG_ENTER("mysqlnd_free_buffered_data");
+	DBG_INF_FMT("Freeing "MYSQLND_LLU_SPEC" row(s)", result->data->row_count);
 
+	DBG_INF_FMT("before: real_usage=%lu  usage=%lu", zend_memory_usage(TRUE TSRMLS_CC),
zend_memory_usage(FALSE TSRMLS_CC));
 	for (row = 0; row < result->data->row_count; row++) {
 		unsigned int col;
 		zval **current_row = current_row = set->data[row];
@@ -97,12 +99,15 @@
 			zend_bool copy_ctor_called;
 			mysqlnd_palloc_zval_ptr_dtor(&(current_row[col]), zval_cache,
 										 result->type, &copy_ctor_called TSRMLS_CC);
+			DBG_INF_FMT("Copy_ctor_called=%d", copy_ctor_called);
 			MYSQLND_INC_CONN_STATISTIC(NULL, copy_ctor_called? STAT_COPY_ON_WRITE_PERFORMED:
 															   STAT_COPY_ON_WRITE_SAVED);
 		}
+		DBG_INF("Freeing current_row & current_buffer");
 		pefree(current_row, set->persistent);
 		pefree(current_buffer, set->persistent);
 	}
+	DBG_INF("Freeing data & row_buffer");
 	pefree(set->data, set->persistent);
 	pefree(set->row_buffers, set->persistent);
 	set->data			= NULL;
@@ -112,8 +117,10 @@
 	if (set->qcache) {
 		mysqlnd_qcache_free_cache_reference(&set->qcache);
 	}
+	DBG_INF("Freeing set");
 	pefree(set, set->persistent);
 
+	DBG_INF_FMT("after: real_usage=%lu  usage=%lu", zend_memory_usage(TRUE TSRMLS_CC),
zend_memory_usage(FALSE TSRMLS_CC));
 	DBG_VOID_RETURN;
 }
 /* }}} */
@@ -154,6 +161,7 @@
 	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;
 	}
@@ -166,6 +174,7 @@
 	}
 
 	if (result->zval_cache) {
+		DBG_INF("Freeing zval cache reference");
 		mysqlnd_palloc_free_thd_cache_reference(&result->zval_cache);
 		result->zval_cache = NULL;
 	}
@@ -488,7 +497,7 @@
 						 UNKNOWN_SQLSTATE, mysqlnd_out_of_sync); 
 		DBG_RETURN(FAIL);
 	}
-	/* Let the row packet fill our buffer and skip additional malloc + memcpy */
+	/* Let the row packet fill our buffer and skip additional mnd_malloc + memcpy */
 	row_packet->skip_extraction = row? FALSE:TRUE;
 
 	/*
@@ -608,7 +617,7 @@
 	result->type			= MYSQLND_RES_NORMAL;
 	result->m.fetch_row		= result->m.fetch_row_normal_unbuffered;
 	result->m.fetch_lengths	= mysqlnd_fetch_lengths_unbuffered;
-	result->unbuf			= ecalloc(1, sizeof(MYSQLND_RES_UNBUFFERED));
+	result->unbuf			= mnd_ecalloc(1, sizeof(MYSQLND_RES_UNBUFFERED));
 
 	/*
 	  Will be freed in the mysqlnd_internal_free_result_contents() called
@@ -621,7 +630,7 @@
 	result->row_packet->fields_metadata = result->meta->fields;
 	result->row_packet->bit_fields_count = result->meta->bit_fields_count;
 	result->row_packet->bit_fields_total_len =
result->meta->bit_fields_total_len;
-	result->lengths = ecalloc(result->field_count, sizeof(unsigned long));
+	result->lengths = mnd_ecalloc(result->field_count, sizeof(unsigned long));
 
 	/* No multithreading issues as we don't share the connection :) */
 
@@ -727,9 +736,9 @@
 
 	free_rows = next_extend;
 
-	result->data	= set = pecalloc(1, sizeof(MYSQLND_RES_BUFFERED), to_cache);
-	set->data		= pemalloc(STORE_RESULT_PREALLOCATED_SET * sizeof(zval **), to_cache);
-	set->row_buffers= pemalloc(STORE_RESULT_PREALLOCATED_SET * sizeof(zend_uchar *),
to_cache);
+	result->data	= set = mnd_pecalloc(1, sizeof(MYSQLND_RES_BUFFERED), to_cache);
+	set->data		= mnd_pemalloc(STORE_RESULT_PREALLOCATED_SET * sizeof(zval **), to_cache);
+	set->row_buffers= mnd_pemalloc(STORE_RESULT_PREALLOCATED_SET * sizeof(zend_uchar *),
to_cache);
 	set->persistent	= to_cache;
 	set->qcache		= to_cache? mysqlnd_qcache_get_cache_reference(conn->qcache):NULL;
 	set->references	= 1;
@@ -748,9 +757,9 @@
 		if (!free_rows) {
 			mynd_ulonglong total_rows = free_rows = next_extend = next_extend * 5 / 3; /* extend
with 33% */
 			total_rows += set->row_count;
-			set->data = perealloc(set->data, total_rows * sizeof(zval **),
set->persistent);
+			set->data = mnd_perealloc(set->data, total_rows * sizeof(zval **),
set->persistent);
 
-			set->row_buffers = perealloc(set->row_buffers,
+			set->row_buffers = mnd_perealloc(set->row_buffers,
 										 total_rows * sizeof(zend_uchar *), set->persistent);
 		}
 		free_rows--;
@@ -795,10 +804,10 @@
 	}
 	/* save some memory */
 	if (free_rows) {
-		set->data = perealloc(set->data,
+		set->data = mnd_perealloc(set->data,
 							  (size_t) set->row_count * sizeof(zval **),
 							  set->persistent);
-		set->row_buffers = perealloc(set->row_buffers,
+		set->row_buffers = mnd_perealloc(set->row_buffers,
 									 (size_t) set->row_count * sizeof(zend_uchar *),
 									 set->persistent);
 	}
@@ -846,7 +855,7 @@
 
 	conn->state = CONN_FETCHING_DATA;
 
-	result->lengths = ecalloc(result->field_count, sizeof(unsigned long));
+	result->lengths = mnd_ecalloc(result->field_count, sizeof(unsigned long));
 
 	ret = mysqlnd_store_result_fetch_data(conn, result, result->meta,
 										  ps_protocol, TRUE, to_cache TSRMLS_CC);
@@ -1127,7 +1136,7 @@
 /* {{{ mysqlnd_result_init */
 MYSQLND_RES *mysqlnd_result_init(unsigned int field_count, MYSQLND_THD_ZVAL_PCACHE *cache
TSRMLS_DC)
 {
-	MYSQLND_RES *ret = ecalloc(1, sizeof(MYSQLND_RES));
+	MYSQLND_RES *ret = mnd_ecalloc(1, sizeof(MYSQLND_RES));
 
 	DBG_ENTER("mysqlnd_result_init");
 	DBG_INF_FMT("field_count=%u cache=%p", field_count, cache);

Modified: trunk/mysqlnd/mysqlnd_result_meta.c
===================================================================
--- trunk/mysqlnd/mysqlnd_result_meta.c	2007-08-22 14:59:54 UTC (rev 941)
+++ trunk/mysqlnd/mysqlnd_result_meta.c	2007-08-22 17:59:11 UTC (rev 942)
@@ -30,15 +30,17 @@
 
 /* {{{ php_mysqlnd_free_field_metadata */
 static
-void php_mysqlnd_free_field_metadata(MYSQLND_FIELD *meta, zend_bool persistent)
+void php_mysqlnd_free_field_metadata(MYSQLND_FIELD *meta, zend_bool persistent TSRMLS_DC)
 {
 	if (meta) {
 		if (meta->root) {
-			pefree(meta->root, persistent);
+			DBG_INF("Freeing field metadata root");
+			mnd_pefree(meta->root, persistent);
 			meta->root = NULL;
 		}
 		if (meta->def) {
-			pefree(meta->def, persistent);
+			DBG_INF("Freeing field def");
+			mnd_pefree(meta->def, persistent);
 			meta->def = NULL;
 		}
 	}
@@ -152,7 +154,7 @@
 
 		if (meta->fields[i].root) {
 			/* We re-read metadata for PS */
-			efree(meta->fields[i].root);
+			mnd_efree(meta->fields[i].root);
 			meta->fields[i].root = NULL;
 		}
 
@@ -222,7 +224,7 @@
 				 			mysqlnd_unicode_is_key_numeric(ustr, ulen + 1, &idx)))
 			{
 				meta->zend_hash_keys[i].key = idx;
-				efree(ustr);
+				mnd_efree(ustr);
 			} else {
 				meta->zend_hash_keys[i].ustr.u = ustr;
 				meta->zend_hash_keys[i].ulen = ulen;
@@ -264,28 +266,31 @@
 	DBG_INF_FMT("persistent=%d", persistent);
 
 	if ((fields = meta->fields)) {
+		DBG_INF("Freeing fields metadata");
 		i = meta->field_count;
 		while (i--) {
-			php_mysqlnd_free_field_metadata(fields++, persistent);
+			php_mysqlnd_free_field_metadata(fields++, persistent TSRMLS_CC);
 		}
-		pefree(meta->fields, persistent);
+		mnd_pefree(meta->fields, persistent);
 		meta->fields = NULL;
 	}
 
 	if (meta->zend_hash_keys) {
+		DBG_INF("Freeing zend_hash_keys");
 #if PHP_MAJOR_VERSION >= 6
 		if (UG(unicode)) {
 			for (i = 0; i < meta->field_count; i++) {
 				if (meta->zend_hash_keys[i].ustr.v) {
-					pefree(meta->zend_hash_keys[i].ustr.v, persistent);
+					mnd_pefree(meta->zend_hash_keys[i].ustr.v, persistent);
 				}
 			}
 		}
 #endif
-		pefree(meta->zend_hash_keys, persistent);
+		mnd_pefree(meta->zend_hash_keys, persistent);
 		meta->zend_hash_keys = NULL;
 	}
-	pefree(meta, persistent);
+	DBG_INF("Freeing metadata structure");
+	mnd_pefree(meta, persistent);
 
 	DBG_VOID_RETURN;
 }
@@ -299,15 +304,15 @@
 {
 	unsigned int i;
 	/* +1 is to have empty marker at the end */
-	MYSQLND_RES_METADATA *new_meta = pemalloc(sizeof(MYSQLND_RES_METADATA), persistent);
-	MYSQLND_FIELD *new_fields = pecalloc(meta->field_count + 1, sizeof(MYSQLND_FIELD),
persistent);
+	MYSQLND_RES_METADATA *new_meta = mnd_pemalloc(sizeof(MYSQLND_RES_METADATA), persistent);
+	MYSQLND_FIELD *new_fields = mnd_pecalloc(meta->field_count + 1,
sizeof(MYSQLND_FIELD), persistent);
 	MYSQLND_FIELD *orig_fields = meta->fields;
 	size_t len = meta->field_count * sizeof(struct mysqlnd_field_hash_key);
 
 	DBG_ENTER("mysqlnd_res_meta::clone_metadata");
 	DBG_INF_FMT("persistent=%d", persistent);
 
-	new_meta->zend_hash_keys = pemalloc(len, persistent);
+	new_meta->zend_hash_keys = mnd_pemalloc(len, persistent);
 	memcpy(new_meta->zend_hash_keys, meta->zend_hash_keys, len);
 	new_meta->m = meta->m;
 
@@ -318,7 +323,7 @@
 	memcpy(new_fields, orig_fields, (meta->field_count) * sizeof(MYSQLND_FIELD));
 	for (i = 0; i < meta->field_count; i++) {
 		/* First copy the root, then field by field adjust the pointers */
-		new_fields[i].root = pemalloc(orig_fields[i].root_len, persistent);
+		new_fields[i].root = mnd_pemalloc(orig_fields[i].root_len, persistent);
 		memcpy(new_fields[i].root, orig_fields[i].root, new_fields[i].root_len);
 
 		if (orig_fields[i].name && orig_fields[i].name != mysqlnd_empty_string) {
@@ -345,7 +350,7 @@
 		}
 		/* def is not on the root, if allocated at all */
 		if (orig_fields[i].def) {
-			new_fields[i].def = pemalloc(orig_fields[i].def_length + 1, persistent);
+			new_fields[i].def = mnd_pemalloc(orig_fields[i].def_length + 1, persistent);
 			/* copy the trailing \0 too */
 			memcpy(new_fields[i].def, orig_fields[i].def, orig_fields[i].def_length + 1);
 		}
@@ -416,7 +421,7 @@
 	DBG_ENTER("mysqlnd_result_meta_init");
 
 	/* +1 is to have empty marker at the end */
-	ret = ecalloc(1, sizeof(MYSQLND_RES_METADATA));
+	ret = mnd_ecalloc(1, sizeof(MYSQLND_RES_METADATA));
 	ret->field_count = field_count;
 	ret->fields = ecalloc(field_count + 1, sizeof(MYSQLND_FIELD));
 	ret->zend_hash_keys = ecalloc(field_count, sizeof(struct mysqlnd_field_hash_key));

Modified: trunk/mysqlnd/mysqlnd_wireprotocol.c
===================================================================
--- trunk/mysqlnd/mysqlnd_wireprotocol.c	2007-08-22 14:59:54 UTC (rev 941)
+++ trunk/mysqlnd/mysqlnd_wireprotocol.c	2007-08-22 17:59:11 UTC (rev 942)
@@ -595,11 +595,11 @@
 {
 	php_mysql_packet_greet *p= (php_mysql_packet_greet *) _packet;
 	if (p->server_version) {
-		efree(p->server_version);
+		mnd_efree(p->server_version);
 		p->server_version = NULL;
 	}
 	if (!alloca) {
-		efree(p);
+		mnd_efree(p);
 	}
 }
 /* }}} */
@@ -723,7 +723,7 @@
 void php_mysqlnd_auth_free_mem(void *_packet, zend_bool alloca)
 {
 	if (!alloca) {
-		efree((php_mysql_packet_auth *) _packet);
+		mnd_efree((php_mysql_packet_auth *) _packet);
 	}
 }
 /* }}} */
@@ -793,11 +793,11 @@
 {
 	php_mysql_packet_ok *p= (php_mysql_packet_ok *) _packet;
 	if (p->message) {
-		efree(p->message);
+		mnd_efree(p->message);
 		p->message = NULL;
 	}
 	if (!alloca) {
-		efree(p);
+		mnd_efree(p);
 	}
 }
 /* }}} */
@@ -867,7 +867,7 @@
 void php_mysqlnd_eof_free_mem(void *_packet, zend_bool alloca)
 {
 	if (!alloca) {
-		efree(_packet);
+		mnd_efree(_packet);
 	}
 }
 /* }}} */
@@ -909,7 +909,7 @@
 #else
 		size_t tmp_len = packet->arg_len + 1 + MYSQLND_HEADER_SIZE, ret;
 		zend_uchar *tmp, *p;
-		tmp = (tmp_len > net->cmd_buffer.length)?
emalloc(tmp_len):net->cmd_buffer.buffer;
+		tmp = (tmp_len > net->cmd_buffer.length)?
mnd_emalloc(tmp_len):net->cmd_buffer.buffer;
 		p = tmp + MYSQLND_HEADER_SIZE; /* skip the header */
 
 		int1store(p, packet->command);
@@ -920,7 +920,7 @@
 		ret = mysqlnd_stream_write_w_header(conn, (char *)tmp, tmp_len - MYSQLND_HEADER_SIZE
TSRMLS_CC);
 		if (tmp != net->cmd_buffer.buffer) {
 			MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_CMD_BUFFER_TOO_SMALL);
-			efree(tmp);
+			mnd_efree(tmp);
 		}
 		written = ret;
 #endif
@@ -939,7 +939,7 @@
 void php_mysqlnd_cmd_free_mem(void *_packet, zend_bool alloca)
 {
 	if (!alloca) {
-		efree((php_mysql_packet_command *) _packet);
+		mnd_efree((php_mysql_packet_command *) _packet);
 	}
 }
 /* }}} */
@@ -981,7 +981,7 @@
 			  Thus, the name is size - 1. And we add 1 for a trailing \0.
 			*/
 			len = packet->header.size - 1;
-			packet->info_or_local_file = pemalloc(len + 1, conn->persistent);
+			packet->info_or_local_file = mnd_pemalloc(len + 1, conn->persistent);
 			memcpy(packet->info_or_local_file, p, len);
 			packet->info_or_local_file[len] = '\0';
 			packet->info_or_local_file_len = len;
@@ -995,7 +995,7 @@
 			p+=2;
 			/* Check for additional textual data */
 			if (packet->header.size  > (p - buf) && (len =
php_mysqlnd_net_field_length(&p))) {
-				packet->info_or_local_file = pemalloc(len + 1, conn->persistent);
+				packet->info_or_local_file = mnd_pemalloc(len + 1, conn->persistent);
 				memcpy(packet->info_or_local_file, p, len);
 				packet->info_or_local_file[len] = '\0';
 				packet->info_or_local_file_len = len;
@@ -1022,11 +1022,11 @@
 {
 	php_mysql_packet_rset_header *p= (php_mysql_packet_rset_header *) _packet;
 	if (p->info_or_local_file) {
-		efree(p->info_or_local_file);
+		mnd_efree(p->info_or_local_file);
 		p->info_or_local_file = NULL;
 	}
 	if (!alloca) {
-		efree(p);
+		mnd_efree(p);
 	}
 }
 /* }}} */
@@ -1137,7 +1137,7 @@
 		len != MYSQLND_NULL_LENGTH)
 	{
 		DBG_INF_FMT("Def found, length %lu", len);
-		meta->def = emalloc(len + 1);
+		meta->def = mnd_emalloc(len + 1);
 		memcpy(meta->def, p, len);
 		meta->def[len] = '\0';
 		meta->def_length = len;
@@ -1150,7 +1150,7 @@
 						 "shorter than expected. PID=%d", p - begin - packet->header.size, getpid());
 	}
 
-	root_ptr = meta->root = emalloc(total_len);
+	root_ptr = meta->root = mnd_emalloc(total_len);
 	meta->root_len = total_len;
 	/* Now do allocs */
 	if (meta->catalog && meta->catalog != mysqlnd_empty_string) {
@@ -1216,7 +1216,7 @@
 
 	/* p->metadata was passed to us as temporal buffer */
 	if (!alloca) {
-		efree(p);
+		mnd_efree(p);
 	}
 }
 /* }}} */
@@ -1258,7 +1258,7 @@
 			  We need a trailing \0 for the last string, in case of text-mode,
 			  to be able to implement read-only variables. Thus, we add + 1.
 			*/
-			p = new_buf = pemalloc(*data_size + 1, persistent_alloc);
+			p = new_buf = mnd_pemalloc(*data_size + 1, persistent_alloc);
 			net->stream->chunk_size = header.size;
 		} else if (!first_iteration) {
 			/* Empty packet after MYSQLND_MAX_PACKET_SIZE packet. That's ok, break */
@@ -1272,7 +1272,7 @@
 			  We need a trailing \0 for the last string, in case of text-mode,
 			  to be able to implement read-only variables.
 			*/
-			new_buf = perealloc(new_buf, *data_size + 1, persistent_alloc);
+			new_buf = mnd_perealloc(new_buf, *data_size + 1, persistent_alloc);
 			/* The position could have changed, recalculate */
 			p = new_buf + (*data_size - header.size);
 		}
@@ -1628,7 +1628,7 @@
 				  but mostly like old-API unbuffered and thus will populate this array with
 				  value.
 				*/
-				packet->fields = (zval **) pemalloc(packet->field_count * sizeof(zval *),
+				packet->fields = (zval **) mnd_pemalloc(packet->field_count * sizeof(zval *),
 													packet->persistent_alloc);
 			}
 
@@ -1655,7 +1655,7 @@
 {
 	php_mysql_packet_row *p= (php_mysql_packet_row *) _packet;
 	if (p->row_buffer) {
-		pefree(p->row_buffer, p->persistent_alloc);
+		mnd_pefree(p->row_buffer, p->persistent_alloc);
 		p->row_buffer = NULL;
 	}
 	/*
@@ -1666,7 +1666,7 @@
 		not free the array. As it is passed to us, we should not clean it ourselves.
 	*/
 	if (!alloca) {
-		efree(p);
+		mnd_efree(p);
 	}
 }
 /* }}} */
@@ -1684,7 +1684,7 @@
 
 	PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "statistics");
 
-	packet->message = pemalloc(packet->header.size + 1, conn->persistent);
+	packet->message = mnd_pemalloc(packet->header.size + 1, conn->persistent);
 	memcpy(packet->message, buf, packet->header.size);
 	packet->message[packet->header.size] = '\0';
 	packet->message_len = packet->header.size;
@@ -1700,11 +1700,11 @@
 {
 	php_mysql_packet_stats *p= (php_mysql_packet_stats *) _packet;
 	if (p->message) {
-		efree(p->message);
+		mnd_efree(p->message);
 		p->message = NULL;
 	}
 	if (!alloca) {
-		efree(p);
+		mnd_efree(p);
 	}
 }
 /* }}} */
@@ -1788,7 +1788,7 @@
 {
 	php_mysql_packet_prepare_response *p= (php_mysql_packet_prepare_response *) _packet;
 	if (!alloca) {
-		efree(p);
+		mnd_efree(p);
 	}
 }
 /* }}} */
@@ -1847,7 +1847,7 @@
 void php_mysqlnd_chg_user_free_mem(void *_packet, zend_bool alloca)
 {
 	if (!alloca) {
-		efree(_packet);
+		mnd_efree(_packet);
 	}
 }
 /* }}} */

Thread
PHP mysqlnd svn commit: r942 - trunk/mysqlndahristov22 Aug