Looks good. Some minor style nits: add a little whitespace in variable assignments like in the rest of the file. "a = b". And maybe document the APR_POOL_DEBUG_VERBOSE flag ;)
Make sure to also do the same thing for apr_pool_destroy and clear, or, let me take care of that tomorrow ;) Sander > -----Original Message----- > From: Ian Holsman [mailto:[EMAIL PROTECTED] > Sent: 11 January 2002 21:11 > To: [email protected] > Subject: [PATCH] -- apr_pool_c debug feature > > > patch to pool debugging to display the pool_creation and it's children > when you destroy them > BTW.. should the global pool be tagged as 'global'? > > ...Ian > the reason I'm posting is i'm not sure if there is a better way to open > up the stderr log to print the stuff out. > > Index: include/apr_pools.h > =================================================================== > RCS file: /home/cvs/apr/include/apr_pools.h,v > retrieving revision 1.66 > diff -u -r1.66 apr_pools.h > --- include/apr_pools.h 1 Jan 2002 23:49:23 -0000 1.66 > +++ include/apr_pools.h 11 Jan 2002 20:07:28 -0000 > @@ -92,8 +92,8 @@ > * NB These should ALL normally be commented out unless you REALLY > * need them!! > */ > -/* > #define APR_POOL_DEBUG > +/* > */ > > #define APR_POOL_STRINGIZE(x) APR_POOL__STRINGIZE(x) > @@ -158,11 +158,23 @@ > * (this flag only makes sense in combination with > POOL_FNEW_ALLOCATOR) > * > */ > +#if defined(APR_POOL_DEBUG) > +#define apr_pool_create_ex( newpool, parent, abort_fn, flag) \ > + apr_pool_create_ex_dbg( newpool, parent, abort_fn, > flag,__FILE__,__LINE__) > + > +APR_DECLARE(apr_status_t) apr_pool_create_ex_dbg(apr_pool_t **newpool, > + apr_pool_t *parent, > + apr_abortfunc_t abort_fn, > + apr_uint32_t flags, > + const char *file, > + int line); > +# > +#else > APR_DECLARE(apr_status_t) apr_pool_create_ex(apr_pool_t **newpool, > apr_pool_t *parent, > apr_abortfunc_t abort_fn, > apr_uint32_t flags); > - > +#endif > /** > * Create a new pool. > * @param newpool The pool we have just created. > Index: memory/unix/apr_pools.c > =================================================================== > RCS file: /home/cvs/apr/memory/unix/apr_pools.c,v > retrieving revision 1.127 > diff -u -r1.127 apr_pools.c > --- memory/unix/apr_pools.c 10 Jan 2002 18:52:49 -0000 1.127 > +++ memory/unix/apr_pools.c 11 Jan 2002 20:07:28 -0000 > @@ -91,6 +91,12 @@ > > #define APR_ALIGN_DEFAULT(size) APR_ALIGN(size, 8) > > +/* > + * This option prints out the pool creation info > + * (and info about its children) > + * when the pool is destroyed. > + */ > +#define APR_POOL_DEBUG_VERBOSE > > /* > * Structures > @@ -161,6 +167,8 @@ > > #else /* !defined(APR_POOL_DEBUG) */ > debug_node_t *nodes; > + const char *file; > + int line; > #if APR_HAS_THREADS > apr_thread_mutex_t *mutex; > #endif > @@ -887,6 +895,9 @@ > return mem; > } > > +/* > + * (debug) > + */ > APR_DECLARE(void *) apr_pcalloc(apr_pool_t *pool, apr_size_t size) > { > void *mem; > @@ -934,9 +945,32 @@ > free(node); > } > } > - > +/* > + * destroy (debug) > + */ > APR_DECLARE(void) apr_pool_destroy(apr_pool_t *pool) > { > +#if defined APR_POOL_DEBUG_VERBOSE > + apr_file_t *stderr_log=NULL; > + apr_pool_t *child; > + > + apr_file_open_stderr(&stderr_log,pool); /* XXX not sure about this > one */ > + if (stderr_log) { > + apr_file_printf(stderr_log, > + "DEBUG: destroy pool tagged %s created %s:%d\n", > + pool->tag, pool->file, pool->line); > + child= pool->child; > + while (child) { > + apr_file_printf(stderr_log, > + "DEBUG:\tpool child tagged %s created %s:%d\n", > + child->tag, child->file, child->line); > + child=child->sibling; > + } > + apr_file_close(stderr_log); > + } > +#endif > + > + > > apr_pool_clear(pool); > > /* Remove the pool from the parents child list */ > @@ -961,10 +995,16 @@ > free(pool); > } > > -APR_DECLARE(apr_status_t) apr_pool_create_ex(apr_pool_t **newpool, > +/* > + * create (debug) > + * there is a macro which adds the file/line # > + */ > +APR_DECLARE(apr_status_t) apr_pool_create_ex_dbg(apr_pool_t **newpool, > apr_pool_t *parent, > apr_abortfunc_t abort_fn, > - apr_uint32_t flags) > + apr_uint32_t flags, > + const char *file, > + int line) > { > apr_pool_t *pool; > > @@ -1027,6 +1067,9 @@ > pool->sibling = NULL; > pool->ref = NULL; > } > + > + pool->file = file; > + pool->line = line; > > *newpool = pool; > >
