25#define MYSQLND_DEBUG_MEMORY 1
27static const char mysqlnd_emalloc_name[] =
"_mysqlnd_emalloc";
28static const char mysqlnd_pemalloc_name[] =
"_mysqlnd_pemalloc";
29static const char mysqlnd_ecalloc_name[] =
"_mysqlnd_ecalloc";
30static const char mysqlnd_pecalloc_name[] =
"_mysqlnd_pecalloc";
31static const char mysqlnd_erealloc_name[] =
"_mysqlnd_erealloc";
32static const char mysqlnd_perealloc_name[] =
"_mysqlnd_perealloc";
33static const char mysqlnd_efree_name[] =
"_mysqlnd_efree";
34static const char mysqlnd_pefree_name[] =
"_mysqlnd_pefree";
35static const char mysqlnd_pememdup_name[] =
"_mysqlnd_pememdup";
36static const char mysqlnd_pestrndup_name[] =
"_mysqlnd_pestrndup";
37static const char mysqlnd_pestrdup_name[] =
"_mysqlnd_pestrdup";
44 mysqlnd_erealloc_name,
45 mysqlnd_pemalloc_name,
46 mysqlnd_pecalloc_name,
48 mysqlnd_perealloc_name,
49 mysqlnd_pestrndup_name,
55#if MYSQLND_DEBUG_MEMORY
60#define __zend_orig_filename "/unknown/unknown"
61#define __zend_orig_lineno 0
64#define EXTRA_SIZE ZEND_MM_ALIGNED_SIZE(sizeof(size_t))
65#define REAL_SIZE(s) (collect_memory_statistics? (s) + EXTRA_SIZE : (s))
66#define REAL_PTR(p) (collect_memory_statistics && (p)? (((char *)(p)) - EXTRA_SIZE) : (p))
67#define FAKE_PTR(p) (collect_memory_statistics && (p)? (((char *)(p)) + EXTRA_SIZE) : (p))
74 TRACE_ALLOC_ENTER(mysqlnd_emalloc_name);
77 TRACE_ALLOC_INF_FMT(
"size=%zu ptr=%p",
size,
ret);
93 TRACE_ALLOC_ENTER(mysqlnd_pemalloc_name);
115 TRACE_ALLOC_ENTER(mysqlnd_ecalloc_name);
120 TRACE_ALLOC_INF_FMT(
"size=%zu ptr=%p",
size,
ret);
135 TRACE_ALLOC_ENTER(mysqlnd_pecalloc_name);
138 TRACE_ALLOC_INF_FMT(
"size=%zu ptr=%p",
size,
ret);
158 TRACE_ALLOC_ENTER(mysqlnd_erealloc_name);
159 TRACE_ALLOC_INF_FMT(
"ptr=%p old_size=%zu, new_size=%zu",
ptr, old_size, new_size);
162 TRACE_ALLOC_INF_FMT(
"new_ptr=%p", (
char*)
ret);
164 *(
size_t *)
ret = new_size;
178 TRACE_ALLOC_ENTER(mysqlnd_perealloc_name);
179 TRACE_ALLOC_INF_FMT(
"ptr=%p old_size=%zu new_size=%zu persistent=%u",
ptr, old_size, new_size,
persistent);
182 TRACE_ALLOC_INF_FMT(
"new_ptr=%p", (
char*)
ret);
187 *(
size_t *)
ret = new_size;
198 size_t free_amount = 0;
200 TRACE_ALLOC_ENTER(mysqlnd_efree_name);
205 TRACE_ALLOC_INF_FMT(
"file=%-15s line=%4d", fn? fn + 1:__zend_filename, __zend_lineno);
208 TRACE_ALLOC_INF_FMT(
"ptr=%p",
ptr);
212 free_amount = *(
size_t *)(((
char*)
ptr) -
sizeof(
size_t));
213 TRACE_ALLOC_INF_FMT(
"ptr=%p size=%zu", ((
char*)
ptr) -
sizeof(
size_t), free_amount);
229 size_t free_amount = 0;
231 TRACE_ALLOC_ENTER(mysqlnd_pefree_name);
236 TRACE_ALLOC_INF_FMT(
"file=%-15s line=%4d", fn? fn + 1:__zend_filename, __zend_lineno);
239 TRACE_ALLOC_INF_FMT(
"ptr=%p persistent=%u",
ptr,
persistent);
243 free_amount = *(
size_t *)(((
char*)
ptr) -
sizeof(
size_t));
244 TRACE_ALLOC_INF_FMT(
"ptr=%p size=%zu", ((
char*)
ptr) -
sizeof(
size_t), free_amount);
263 TRACE_ALLOC_ENTER(mysqlnd_pememdup_name);
268 TRACE_ALLOC_INF_FMT(
"file=%-15s line=%4d", fn? fn + 1:__zend_filename, __zend_lineno);
271 TRACE_ALLOC_INF_FMT(
"ptr=%p",
ptr);
280 *(
size_t *)
ret = length;
294 TRACE_ALLOC_ENTER(mysqlnd_pestrndup_name);
299 TRACE_ALLOC_INF_FMT(
"file=%-15s line=%4d", fn? fn + 1:__zend_filename, __zend_lineno);
302 TRACE_ALLOC_INF_FMT(
"ptr=%p",
ptr);
307 char *
p = (
char *)
ptr;
316 *(
size_t *)
ret = length;
325#define SMART_STR_START_SIZE 2048
334 const char *
p =
ptr;
336 TRACE_ALLOC_ENTER(mysqlnd_pestrdup_name);
340 TRACE_ALLOC_INF_FMT(
"file=%-15s line=%4d", fn? fn + 1:__zend_filename, __zend_lineno);
343 TRACE_ALLOC_INF_FMT(
"ptr=%p",
ptr);
345 smart_str_appendc(&tmp_str, *
p);
355 smart_str_free(&tmp_str);
381static void * mysqlnd_zend_mm_ecalloc(
unsigned int nmemb,
size_t size MYSQLND_MEM_D)
397static void * mysqlnd_zend_mm_erealloc(
void *
ptr,
size_t new_size
MYSQLND_MEM_D)
460#if MYSQLND_DEBUG_MEMORY == 1
473 mysqlnd_zend_mm_emalloc,
474 mysqlnd_zend_mm_pemalloc,
475 mysqlnd_zend_mm_ecalloc,
476 mysqlnd_zend_mm_pecalloc,
477 mysqlnd_zend_mm_erealloc,
478 mysqlnd_zend_mm_perealloc,
479 mysqlnd_zend_mm_efree,
480 mysqlnd_zend_mm_pefree,
481 mysqlnd_zend_mm_pememdup,
482 mysqlnd_zend_mm_pestrndup,
483 mysqlnd_zend_mm_pestrdup
strrchr(string $haystack, string $needle, bool $before_needle=false)
#define MYSQLND_INC_GLOBAL_STATISTIC(statistic)
bool collect_memory_statistics
#define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2)
PHPAPI struct st_mysqlnd_allocator_methods mysqlnd_allocator
PHPAPI const char * mysqlnd_debug_std_no_trace_funcs[]
#define TRACE_ALLOC_VOID_RETURN
#define TRACE_ALLOC_RETURN(value)
@ STAT_MEM_EREALLOC_COUNT
@ STAT_MEM_EMALLOC_AMOUNT
@ STAT_MEM_ECALLOC_AMOUNT
@ STAT_MEM_EREALLOC_AMOUNT
@ STAT_MEM_ESTRNDUP_COUNT
@ STAT_MEM_REALLOC_AMOUNT
const char mysqlnd_read_body_name[]
const char mysqlnd_read_header_name[]
#define PHP_DIR_SEPARATOR
ZEND_API size_t zend_memory_usage(bool real_usage)
ZEND_API char *ZEND_FASTCALL zend_strndup(const char *s, size_t length)
#define perealloc_rel(ptr, size, persistent)
#define estrndup_rel(s, length)
#define erealloc_rel(ptr, size)
#define pestrdup_rel(s, persistent)
#define ecalloc_rel(nmemb, size)
#define emalloc_rel(size)
#define pefree_rel(ptr, persistent)
#define pemalloc_rel(size, persistent)
#define pecalloc_rel(nmemb, size, persistent)