apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Joshua Moore-Oliva <j...@chatgris.com>
Subject Bug Report -- sorry if duplicate my first attempt at sending my email was not working.
Date Thu, 10 Jul 2003 21:45:45 GMT
Currently in apr_pool_destroy there is this chunk of code

    while (pool->child)
        apr_pool_destroy(pool->child);

  run_cleanups(&pool->cleanups);


The problem here is if I created a subpool for temporary scratch space, then 
registered that subpool as a cleanup the pool will be cleaned up in the first 
chunk of code.

  while (pool->child)
        apr_pool_destroy(pool->child);

  THEN will be run again with

  run_cleanups(&pool->cleanups);

  causing a segmentation fault.


This code here Fixed the problem by running the cleanups first then destroying 
the subpools.


  run_cleanups(&pool->cleanups);


    while (pool->child)
        apr_pool_destroy(pool->child);



Sample pseudo//simplified code that causes the problem is below for further 
clarification.

apr_status_t file_field_clean( t ) {
  apr_pool_destroy( t->read_pool );
  apr_pool_destroy( t->write_pool );
  free(t);

  return APR_SUCCESS;
}

struct ffm_t file_field_init( apr_pool_t * pool ) {
  struct ffm_t * t;

  t = malloc( sizeof( struct ffm_t ) );

  if ( apr_pool_create( &(t->read_pool), pool ) != APR_SUCCESS ) {
    return NULL;
  }

  if ( apr_pool_create( &(t->write_pool), pool ) != APR_SUCCESS ) {
    return NULL;
  }

  apr_pool_cleanup_register( pool, t, file_field_clean, file_field_clean );

  return t;
}


Mime
View raw message