Annotation of embedaddon/php/ext/mysqlnd/mysqlnd_debug.h, revision 1.1

1.1     ! misho       1: /*
        !             2:   +----------------------------------------------------------------------+
        !             3:   | PHP Version 5                                                        |
        !             4:   +----------------------------------------------------------------------+
        !             5:   | Copyright (c) 2006-2012 The PHP Group                                |
        !             6:   +----------------------------------------------------------------------+
        !             7:   | This source file is subject to version 3.01 of the PHP license,      |
        !             8:   | that is bundled with this package in the file LICENSE, and is        |
        !             9:   | available through the world-wide-web at the following url:           |
        !            10:   | http://www.php.net/license/3_01.txt                                  |
        !            11:   | If you did not receive a copy of the PHP license and are unable to   |
        !            12:   | obtain it through the world-wide-web, please send a note to          |
        !            13:   | license@php.net so we can mail you a copy immediately.               |
        !            14:   +----------------------------------------------------------------------+
        !            15:   | Authors: Georg Richter <georg@mysql.com>                             |
        !            16:   |          Andrey Hristov <andrey@mysql.com>                           |
        !            17:   |          Ulf Wendel <uwendel@mysql.com>                              |
        !            18:   +----------------------------------------------------------------------+
        !            19: */
        !            20: 
        !            21: /* $Id: mysqlnd_debug.h 321634 2012-01-01 13:15:04Z felipe $ */
        !            22: 
        !            23: #ifndef MYSQLND_DEBUG_H
        !            24: #define MYSQLND_DEBUG_H
        !            25: 
        !            26: #include "zend_stack.h"
        !            27: 
        !            28: struct st_mysqlnd_debug_methods
        !            29: {
        !            30:        enum_func_status (*open)(MYSQLND_DEBUG * self, zend_bool reopen);
        !            31:        void                     (*set_mode)(MYSQLND_DEBUG * self, const char * const mode);
        !            32:        enum_func_status (*log)(MYSQLND_DEBUG * self, unsigned int line, const char * const file,
        !            33:                                                        unsigned int level, const char * type, const char *message);
        !            34:        enum_func_status (*log_va)(MYSQLND_DEBUG * self, unsigned int line, const char * const file,
        !            35:                                                           unsigned int level, const char * type, const char *format, ...);
        !            36:        zend_bool (*func_enter)(MYSQLND_DEBUG * self, unsigned int line, const char * const file,
        !            37:                                                        const char * const func_name, unsigned int func_name_len);
        !            38:        enum_func_status (*func_leave)(MYSQLND_DEBUG * self, unsigned int line, const char * const file, uint64_t call_time);
        !            39:        enum_func_status (*close)(MYSQLND_DEBUG * self);
        !            40:        enum_func_status (*free_handle)(MYSQLND_DEBUG * self);
        !            41: };
        !            42: 
        !            43: 
        !            44: struct st_mysqlnd_debug
        !            45: {
        !            46:        php_stream      *stream;
        !            47: #ifdef ZTS
        !            48:        TSRMLS_D;
        !            49: #endif
        !            50:        unsigned int flags;
        !            51:        unsigned int nest_level_limit;
        !            52:        int pid;
        !            53:        char * file_name;
        !            54:        zend_stack call_stack;
        !            55:        zend_stack call_time_stack;     
        !            56:        HashTable not_filtered_functions;
        !            57:        HashTable function_profiles;
        !            58:        struct st_mysqlnd_debug_methods *m;
        !            59:        const char ** skip_functions;
        !            60: };
        !            61: 
        !            62: PHPAPI extern const char * mysqlnd_debug_std_no_trace_funcs[];
        !            63: 
        !            64: PHPAPI MYSQLND_DEBUG * mysqlnd_debug_init(const char * skip_functions[] TSRMLS_DC);
        !            65: 
        !            66: PHPAPI char *  mysqlnd_get_backtrace(uint max_levels, size_t * length TSRMLS_DC);
        !            67: 
        !            68: #if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 1400))
        !            69: #ifdef PHP_WIN32
        !            70: #include "win32/time.h"
        !            71: #elif defined(NETWARE)
        !            72: #include <sys/timeval.h>
        !            73: #include <sys/time.h>
        !            74: #else
        !            75: #include <sys/time.h>
        !            76: #endif
        !            77: 
        !            78: #ifndef MYSQLND_PROFILING_DISABLED
        !            79: #define DBG_PROFILE_TIMEVAL_TO_DOUBLE(tp)      ((tp.tv_sec * 1000000LL)+ tp.tv_usec)
        !            80: #define DBG_PROFILE_START_TIME()               gettimeofday(&__dbg_prof_tp, NULL); __dbg_prof_start = DBG_PROFILE_TIMEVAL_TO_DOUBLE(__dbg_prof_tp);
        !            81: #define DBG_PROFILE_END_TIME(duration) gettimeofday(&__dbg_prof_tp, NULL); (duration) = (DBG_PROFILE_TIMEVAL_TO_DOUBLE(__dbg_prof_tp) - __dbg_prof_start);
        !            82: #else
        !            83: #define DBG_PROFILE_TIMEVAL_TO_DOUBLE(tp)
        !            84: #define DBG_PROFILE_START_TIME()
        !            85: #define DBG_PROFILE_END_TIME(duration)
        !            86: #endif
        !            87: 
        !            88: #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)
        !            89: #define DBG_ERR_EX(dbg_obj, msg)               do { if (dbg_skip_trace == FALSE) (dbg_obj)->m->log((dbg_obj), __LINE__, __FILE__, -1, "error: ", (msg)); } while (0)
        !            90: #define DBG_INF_FMT_EX(dbg_obj, ...)   do { if (dbg_skip_trace == FALSE) (dbg_obj)->m->log_va((dbg_obj), __LINE__, __FILE__, -1, "info : ", __VA_ARGS__); } while (0)
        !            91: #define DBG_ERR_FMT_EX(dbg_obj, ...)   do { if (dbg_skip_trace == FALSE) (dbg_obj)->m->log_va((dbg_obj), __LINE__, __FILE__, -1, "error: ", __VA_ARGS__); } while (0)
        !            92: 
        !            93: #define DBG_BLOCK_ENTER_EX(dbg_obj, block_name) \
        !            94:                { \
        !            95:                        DBG_ENTER_EX(dbg_obj, (block_name));
        !            96: 
        !            97: #define DBG_BLOCK_LEAVE_EX(dbg_obj) \
        !            98:                        DBG_LEAVE_EX((dbg_obj), ;) \
        !            99:                } \
        !           100:        
        !           101: 
        !           102: #define DBG_ENTER_EX(dbg_obj, func_name) \
        !           103:                                        struct timeval __dbg_prof_tp = {0}; \
        !           104:                                        uint64_t __dbg_prof_start = 0; /* initialization is needed */ \
        !           105:                                        zend_bool dbg_skip_trace = TRUE; \
        !           106:                                        if ((dbg_obj)) { \
        !           107:                                                dbg_skip_trace = !(dbg_obj)->m->func_enter((dbg_obj), __LINE__, __FILE__, func_name, strlen(func_name)); \
        !           108:                                        } \
        !           109:                                        do { \
        !           110:                                                if ((dbg_obj) && (dbg_obj)->flags & MYSQLND_DEBUG_PROFILE_CALLS) { \
        !           111:                                                        DBG_PROFILE_START_TIME(); \
        !           112:                                                } \
        !           113:                                        } while (0); 
        !           114: 
        !           115: #define DBG_LEAVE_EX(dbg_obj, leave)   \
        !           116:                        do {\
        !           117:                                if ((dbg_obj)) { \
        !           118:                                        uint64_t this_call_duration = 0; \
        !           119:                                        if ((dbg_obj)->flags & MYSQLND_DEBUG_PROFILE_CALLS) { \
        !           120:                                                DBG_PROFILE_END_TIME(this_call_duration); \
        !           121:                                        } \
        !           122:                                        (dbg_obj)->m->func_leave((dbg_obj), __LINE__, __FILE__, this_call_duration); \
        !           123:                                } \
        !           124:                                leave \
        !           125:                        } while (0);
        !           126: 
        !           127: #define DBG_RETURN_EX(dbg_obj, value) DBG_LEAVE_EX(dbg_obj, return (value);)
        !           128: 
        !           129: #define DBG_VOID_RETURN_EX(dbg_obj) DBG_LEAVE_EX(dbg_obj, return;)
        !           130: 
        !           131: 
        !           132: 
        !           133: #else
        !           134: static inline void DBG_INF_EX(MYSQLND_DEBUG * dbg_obj, const char * const msg) {}
        !           135: static inline void DBG_ERR_EX(MYSQLND_DEBUG * dbg_obj, const char * const msg) {}
        !           136: static inline void DBG_INF_FMT_EX(MYSQLND_DEBUG * dbg_obj, ...) {}
        !           137: static inline void DBG_ERR_FMT_EX(MYSQLND_DEBUG * dbg_obj, ...) {}
        !           138: static inline void DBG_ENTER_EX(MYSQLND_DEBUG * dbg_obj, const char * const func_name) {}
        !           139: #define DBG_BLOCK_ENTER(bname)                 {
        !           140: #define DBG_RETURN_EX(dbg_obj, value)  return (value)
        !           141: #define DBG_VOID_RETURN_EX(dbg_obj)            return
        !           142: #define DBG_BLOCK_LEAVE_EX(dbg_obj)            }
        !           143: 
        !           144: #endif /* defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 1400)) */
        !           145: 
        !           146: #if MYSQLND_DBG_ENABLED == 1
        !           147: 
        !           148: #define DBG_INF(msg)           DBG_INF_EX(MYSQLND_G(dbg), (msg))
        !           149: #define DBG_ERR(msg)           DBG_ERR_EX(MYSQLND_G(dbg), (msg))
        !           150: #define DBG_INF_FMT(...)       DBG_INF_FMT_EX(MYSQLND_G(dbg), __VA_ARGS__)
        !           151: #define DBG_ERR_FMT(...)       DBG_ERR_FMT_EX(MYSQLND_G(dbg), __VA_ARGS__)
        !           152: 
        !           153: #define DBG_ENTER(func_name)   DBG_ENTER_EX(MYSQLND_G(dbg), (func_name))
        !           154: #define DBG_BLOCK_ENTER(bname) DBG_BLOCK_ENTER_EX(MYSQLND_G(dbg), (bname))
        !           155: #define DBG_RETURN(value)              DBG_RETURN_EX(MYSQLND_G(dbg), (value))
        !           156: #define DBG_VOID_RETURN                        DBG_VOID_RETURN_EX(MYSQLND_G(dbg))
        !           157: #define DBG_BLOCK_LEAVE                        DBG_BLOCK_LEAVE_EX(MYSQLND_G(dbg))
        !           158: 
        !           159: #elif MYSQLND_DBG_ENABLED == 0
        !           160: 
        !           161: 
        !           162: 
        !           163: static inline void DBG_INF(const char * const msg) {}
        !           164: static inline void DBG_ERR(const char * const msg) {}
        !           165: static inline void DBG_INF_FMT(const char * const format, ...) {}
        !           166: static inline void DBG_ERR_FMT(const char * const format, ...) {}
        !           167: static inline void DBG_ENTER(const char * const func_name) {}
        !           168: #define DBG_BLOCK_ENTER(bname) {
        !           169: #define DBG_RETURN(value)              return (value)
        !           170: #define DBG_VOID_RETURN                        return
        !           171: #define DBG_BLOCK_LEAVE                        }
        !           172: 
        !           173: #endif
        !           174: 
        !           175: 
        !           176: #define MYSQLND_MEM_D  TSRMLS_DC ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC
        !           177: #define MYSQLND_MEM_C  TSRMLS_CC ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC
        !           178: 
        !           179: struct st_mysqlnd_allocator_methods
        !           180: {
        !           181:        void *  (*m_emalloc)(size_t size MYSQLND_MEM_D);
        !           182:        void *  (*m_pemalloc)(size_t size, zend_bool persistent MYSQLND_MEM_D);
        !           183:        void *  (*m_ecalloc)(unsigned int nmemb, size_t size MYSQLND_MEM_D);
        !           184:        void *  (*m_pecalloc)(unsigned int nmemb, size_t size, zend_bool persistent MYSQLND_MEM_D);
        !           185:        void *  (*m_erealloc)(void *ptr, size_t new_size MYSQLND_MEM_D);
        !           186:        void *  (*m_perealloc)(void *ptr, size_t new_size, zend_bool persistent MYSQLND_MEM_D);
        !           187:        void    (*m_efree)(void *ptr MYSQLND_MEM_D);
        !           188:        void    (*m_pefree)(void *ptr, zend_bool persistent MYSQLND_MEM_D);
        !           189:        void *  (*m_malloc)(size_t size MYSQLND_MEM_D);
        !           190:        void *  (*m_calloc)(unsigned int nmemb, size_t size MYSQLND_MEM_D);
        !           191:        void *  (*m_realloc)(void *ptr, size_t new_size MYSQLND_MEM_D);
        !           192:        void    (*m_free)(void *ptr MYSQLND_MEM_D);
        !           193:        char *  (*m_pestrndup)(const char * const ptr, size_t size, zend_bool persistent MYSQLND_MEM_D);
        !           194:        char *  (*m_pestrdup)(const char * const ptr, zend_bool persistent MYSQLND_MEM_D);
        !           195: };
        !           196: 
        !           197: PHPAPI extern struct st_mysqlnd_allocator_methods mysqlnd_allocator;
        !           198: 
        !           199: 
        !           200: PHPAPI void *  _mysqlnd_emalloc(size_t size MYSQLND_MEM_D);
        !           201: PHPAPI void *  _mysqlnd_pemalloc(size_t size, zend_bool persistent MYSQLND_MEM_D);
        !           202: PHPAPI void *  _mysqlnd_ecalloc(unsigned int nmemb, size_t size MYSQLND_MEM_D);
        !           203: PHPAPI void *  _mysqlnd_pecalloc(unsigned int nmemb, size_t size, zend_bool persistent MYSQLND_MEM_D);
        !           204: PHPAPI void *  _mysqlnd_erealloc(void *ptr, size_t new_size MYSQLND_MEM_D);
        !           205: PHPAPI void *  _mysqlnd_perealloc(void *ptr, size_t new_size, zend_bool persistent MYSQLND_MEM_D);
        !           206: PHPAPI void            _mysqlnd_efree(void *ptr MYSQLND_MEM_D);
        !           207: PHPAPI void            _mysqlnd_pefree(void *ptr, zend_bool persistent MYSQLND_MEM_D);
        !           208: PHPAPI void *  _mysqlnd_malloc(size_t size MYSQLND_MEM_D);
        !           209: PHPAPI void *  _mysqlnd_calloc(unsigned int nmemb, size_t size MYSQLND_MEM_D);
        !           210: PHPAPI void *  _mysqlnd_realloc(void *ptr, size_t new_size MYSQLND_MEM_D);
        !           211: PHPAPI void            _mysqlnd_free(void *ptr MYSQLND_MEM_D);
        !           212: PHPAPI char *  _mysqlnd_pestrndup(const char * const ptr, size_t size, zend_bool persistent MYSQLND_MEM_D);
        !           213: PHPAPI char *  _mysqlnd_pestrdup(const char * const ptr, zend_bool persistent MYSQLND_MEM_D);
        !           214: 
        !           215: 
        !           216: #define mnd_emalloc(size)                              mysqlnd_allocator.m_emalloc((size) MYSQLND_MEM_C)
        !           217: #define mnd_pemalloc(size, pers)               mysqlnd_allocator.m_pemalloc((size), (pers) MYSQLND_MEM_C)
        !           218: #define mnd_ecalloc(nmemb, size)               mysqlnd_allocator.m_ecalloc((nmemb), (size) MYSQLND_MEM_C)
        !           219: #define mnd_pecalloc(nmemb, size, p)   mysqlnd_allocator.m_pecalloc((nmemb), (size), (p) MYSQLND_MEM_C)
        !           220: #define mnd_erealloc(ptr, new_size)            mysqlnd_allocator.m_erealloc((ptr), (new_size) MYSQLND_MEM_C)
        !           221: #define mnd_perealloc(ptr, new_size, p)        mysqlnd_allocator.m_perealloc((ptr), (new_size), (p) MYSQLND_MEM_C)
        !           222: #define mnd_efree(ptr)                                 mysqlnd_allocator.m_efree((ptr) MYSQLND_MEM_C)
        !           223: #define mnd_pefree(ptr, pers)                  mysqlnd_allocator.m_pefree((ptr), (pers) MYSQLND_MEM_C)
        !           224: #define mnd_malloc(size)                               mysqlnd_allocator.m_malloc((size) MYSQLND_MEM_C)
        !           225: #define mnd_calloc(nmemb, size)                        mysqlnd_allocator.m_calloc((nmemb), (size) MYSQLND_MEM_C)
        !           226: #define mnd_realloc(ptr, new_size)             mysqlnd_allocator.m_realloc((ptr), (new_size) MYSQLND_MEM_C)
        !           227: #define mnd_free(ptr)                                  mysqlnd_allocator.m_free((ptr) MYSQLND_MEM_C)
        !           228: #define mnd_pestrndup(ptr, size, pers) mysqlnd_allocator.m_pestrndup((ptr), (size), (pers) MYSQLND_MEM_C)
        !           229: #define mnd_pestrdup(ptr, pers)                        mysqlnd_allocator.m_pestrdup((ptr), (pers) MYSQLND_MEM_C)
        !           230: 
        !           231: #endif /* MYSQLND_DEBUG_H */
        !           232: 
        !           233: /*
        !           234:  * Local variables:
        !           235:  * tab-width: 4
        !           236:  * c-basic-offset: 4
        !           237:  * End:
        !           238:  * vim600: noet sw=4 ts=4 fdm=marker
        !           239:  * vim<600: noet sw=4 ts=4
        !           240:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>