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

Reply via email to