dgaudet     98/01/26 18:37:52

  Modified:    src/main alloc.c
  Log:
  more pool debugging -- copy_table() and overlay_tables() have implicit
  assumptions about the pool relationships of their arguments.   There
  are actually some bugs in the core code I'll fix in a few minutes.
  
  Revision  Changes    Path
  1.70      +24 -0     apachen/src/main/alloc.c
  
  Index: alloc.c
  ===================================================================
  RCS file: /export/home/cvs/apachen/src/main/alloc.c,v
  retrieving revision 1.69
  retrieving revision 1.70
  diff -u -r1.69 -r1.70
  --- alloc.c   1998/01/26 19:50:10     1.69
  +++ alloc.c   1998/01/27 02:37:51     1.70
  @@ -873,6 +873,15 @@
   {
       table *new = palloc(p, sizeof(table));
   
  +#ifdef POOL_DEBUG
  +    /* we don't copy keys and values, so it's necessary that t->a.pool
  +     * have a life span at least as long as p
  +     */
  +    if (!pool_is_ancestor(t->a.pool, p)) {
  +     fprintf(stderr, "copy_table: t's pool is not an ancestor of p\n");
  +     abort();
  +    }
  +#endif
       make_array_core(&new->a, p, t->a.nalloc, sizeof(table_entry));
       memcpy(new->a.elts, t->a.elts, t->a.nelts * sizeof(table_entry));
       new->a.nelts = t->a.nelts;
  @@ -1083,6 +1092,21 @@
   API_EXPORT(table *) overlay_tables(pool *p, const table *overlay, const 
table *base)
   {
       table *res;
  +
  +#ifdef POOL_DEBUG
  +    /* we don't copy keys and values, so it's necessary that
  +     * overlay->a.pool and base->a.pool have a life span at least
  +     * as long as p
  +     */
  +    if (!pool_is_ancestor(overlay->a.pool, p)) {
  +     fprintf(stderr, "overlay_tables: overlay's pool is not an ancestor of 
p\n");
  +     abort();
  +    }
  +    if (!pool_is_ancestor(base->a.pool, p)) {
  +     fprintf(stderr, "overlay_tables: base's pool is not an ancestor of 
p\n");
  +     abort();
  +    }
  +#endif
   
       res = palloc(p, sizeof(table));
       /* behave like append_arrays */
  
  
  

Reply via email to