apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ian Holsman <i...@apache.org>
Subject [PATCH] -- apr_pool_c debug feature
Date Fri, 11 Jan 2002 20:10:51 GMT
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