andrey Thu, 21 Jan 2010 18:12:18 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=293815
Log:
Add possibility to restrain the number of levels
Changed paths:
U php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.c
U php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.h
U php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.c
U php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.h
Modified: php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.c 2010-01-21
18:08:30 UTC (rev 293814)
+++ php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.c 2010-01-21
18:12:18 UTC (rev 293815)
@@ -1113,11 +1113,17 @@
long line;
HashTable *ht = Z_ARRVAL_PP(frame);
zval **file, **tmp;
+ uint * level;
+ level = va_arg(args, uint *);
str = va_arg(args, char**);
len = va_arg(args, int*);
num = va_arg(args, int*);
+ if (!(*level)--) {
+ return ZEND_HASH_APPLY_KEEP;
+ }
+
s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1);
sprintf(s_tmp, "#%d ", (*num)++);
TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
@@ -1283,11 +1289,17 @@
long line;
HashTable *ht = Z_ARRVAL_PP(frame);
zval **file, **tmp;
+ uint * level;
+ level = va_arg(args, uint *);
str = va_arg(args, char**);
len = va_arg(args, int*);
num = va_arg(args, int*);
+ if (!(*level)--) {
+ return ZEND_HASH_APPLY_KEEP;
+ }
+
s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1);
sprintf(s_tmp, "#%d ", (*num)++);
TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
@@ -1323,24 +1335,30 @@
#endif
-char * mysqlnd_get_backtrace(TSRMLS_D)
+PHPAPI char * mysqlnd_get_backtrace(uint max_levels, size_t * length TSRMLS_DC)
{
zval *trace;
char *res = estrdup(""), **str = &res, *s_tmp;
int res_len = 0, *len = &res_len, num = 0;
+ if (max_levels == 0) {
+ max_levels = 99999;
+ }
MAKE_STD_ZVAL(trace);
zend_fetch_debug_backtrace(trace, 0, 0 TSRMLS_CC);
- zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC,
(apply_func_args_t)mysqlnd_build_trace_string, 3, str, len, &num);
+ zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC,
(apply_func_args_t)mysqlnd_build_trace_string, 4, &max_levels, str, len, &num);
zval_ptr_dtor(&trace);
- s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1);
- sprintf(s_tmp, "#%d {main}", num);
- TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
- efree(s_tmp);
+ if (max_levels) {
+ s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1);
+ sprintf(s_tmp, "#%d {main}", num);
+ TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
+ efree(s_tmp);
+ }
res[res_len] = '\0';
+ *length = res_len;
return res;
}
Modified: php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.h
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.h 2010-01-21
18:08:30 UTC (rev 293814)
+++ php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_debug.h 2010-01-21
18:12:18 UTC (rev 293815)
@@ -78,7 +78,7 @@
PHPAPI void * _mysqlnd_realloc(void *ptr, size_t new_size MYSQLND_MEM_D);
PHPAPI void _mysqlnd_free(void *ptr MYSQLND_MEM_D);
-PHPAPI char * mysqlnd_get_backtrace(TSRMLS_D);
+PHPAPI char * mysqlnd_get_backtrace(uint max_levels, size_t * length
TSRMLS_DC);
#if defined(__GNUC__)
#define DBG_INF_EX(dbg_obj, msg) do { if (dbg_skip_trace ==
FALSE) (dbg_obj)->m->log((dbg_obj), __LINE__, __FILE__, -1, "info : ", (msg));
} while (0)
Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.c
===================================================================
--- php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.c 2010-01-21 18:08:30 UTC
(rev 293814)
+++ php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.c 2010-01-21 18:12:18 UTC
(rev 293815)
@@ -1113,11 +1113,17 @@
long line;
HashTable *ht = Z_ARRVAL_PP(frame);
zval **file, **tmp;
+ uint * level;
+ level = va_arg(args, uint *);
str = va_arg(args, char**);
len = va_arg(args, int*);
num = va_arg(args, int*);
+ if (!(*level)--) {
+ return ZEND_HASH_APPLY_KEEP;
+ }
+
s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1);
sprintf(s_tmp, "#%d ", (*num)++);
TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
@@ -1283,11 +1289,17 @@
long line;
HashTable *ht = Z_ARRVAL_PP(frame);
zval **file, **tmp;
+ uint * level;
+ level = va_arg(args, uint *);
str = va_arg(args, char**);
len = va_arg(args, int*);
num = va_arg(args, int*);
+ if (!(*level)--) {
+ return ZEND_HASH_APPLY_KEEP;
+ }
+
s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1);
sprintf(s_tmp, "#%d ", (*num)++);
TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
@@ -1323,24 +1335,30 @@
#endif
-char * mysqlnd_get_backtrace(TSRMLS_D)
+PHPAPI char * mysqlnd_get_backtrace(uint max_levels, size_t * length TSRMLS_DC)
{
zval *trace;
char *res = estrdup(""), **str = &res, *s_tmp;
int res_len = 0, *len = &res_len, num = 0;
+ if (max_levels == 0) {
+ max_levels = 99999;
+ }
MAKE_STD_ZVAL(trace);
zend_fetch_debug_backtrace(trace, 0, 0 TSRMLS_CC);
- zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC,
(apply_func_args_t)mysqlnd_build_trace_string, 3, str, len, &num);
+ zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC,
(apply_func_args_t)mysqlnd_build_trace_string, 4, &max_levels, str, len, &num);
zval_ptr_dtor(&trace);
- s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1);
- sprintf(s_tmp, "#%d {main}", num);
- TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
- efree(s_tmp);
+ if (max_levels) {
+ s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 7 + 1);
+ sprintf(s_tmp, "#%d {main}", num);
+ TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
+ efree(s_tmp);
+ }
res[res_len] = '\0';
+ *length = res_len;
return res;
}
Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.h
===================================================================
--- php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.h 2010-01-21 18:08:30 UTC
(rev 293814)
+++ php/php-src/trunk/ext/mysqlnd/mysqlnd_debug.h 2010-01-21 18:12:18 UTC
(rev 293815)
@@ -78,7 +78,7 @@
PHPAPI void * _mysqlnd_realloc(void *ptr, size_t new_size MYSQLND_MEM_D);
PHPAPI void _mysqlnd_free(void *ptr MYSQLND_MEM_D);
-PHPAPI char * mysqlnd_get_backtrace(TSRMLS_D);
+PHPAPI char * mysqlnd_get_backtrace(uint max_levels, size_t * length
TSRMLS_DC);
#if defined(__GNUC__)
#define DBG_INF_EX(dbg_obj, msg) do { if (dbg_skip_trace ==
FALSE) (dbg_obj)->m->log((dbg_obj), __LINE__, __FILE__, -1, "info : ", (msg));
} while (0)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php