This patch also highlights another problem with our current test suite. Please, stop putting assert() statements in the test suite. Asserts are not a valid way to determine if a test was successful, because they stop all other tests from running.
Ryan > static int make_child(apr_proc_t **proc, apr_pool_t *p) > { > @@ -82,14 +83,14 @@ > > if (apr_proc_fork(*proc, p) == APR_INCHILD) { > while (1) { > - apr_proc_mutex_lock(proc_lock); > + assert(apr_proc_mutex_lock(proc_lock) == APR_SUCCESS); > if (i == MAX_ITER) { > - apr_proc_mutex_unlock(proc_lock); > + assert(apr_proc_mutex_unlock(proc_lock) == APR_SUCCESS); > exit(1); > } > i++; > (*x)++; > - apr_proc_mutex_unlock(proc_lock); > + assert(apr_proc_mutex_unlock(proc_lock) == APR_SUCCESS); > } > exit(1); > } > @@ -155,7 +156,6 @@ > printf("APR Proc Mutex Test\n==============\n\n"); > > apr_initialize(); > - atexit(apr_terminate); > > if (apr_pool_create(&pool, NULL) != APR_SUCCESS) > exit(-1); > @@ -178,15 +178,22 @@ > exit(-1); > } > > - apr_shm_create(&shm, sizeof(int), shmname, pool); > + assert(apr_shm_create(&shm, 2 * sizeof(int), shmname, pool) == > APR_SUCCESS); > x = apr_shm_baseaddr_get(shm); > + y = x + 1; > > if ((rv = test_exclusive(lockname)) != APR_SUCCESS) { > fprintf(stderr,"Exclusive Lock test failed : [%d] %s\n", > rv, apr_strerror(rv, (char*)errmsg, 200)); > exit(-2); > } > - > + > + /* if the child processes run apr_terminate() when they exit, the > + * mutex will be destroyed and remaining children will be left with > + * a useless mutex > + */ > + apr_terminate(); > + > return 0; > } > > > -- > Jeff Trawick | [EMAIL PROTECTED] > Born in Roswell... married an alien... >