apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sander Striker" <stri...@apache.org>
Subject RE: [PATCH] -- apr_pool_c debug feature
Date Fri, 11 Jan 2002 20:26:05 GMT
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:ianh@apache.org]
> Sent: 11 January 2002 21:11
> To: dev@apr.apache.org
> 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;
> 
> 

Mime
View raw message