On 01.10.2010 15:22, Jeff Trawick wrote:
Tarballs are at http://apr.apache.org/dev/dist/. Windows packages are
not yet available.
Due to the inclusion of a fix for a potential DOS that could affect
some library consumers, I hope to get enough feedback within 24 hours
to release.
+/-1
[+1] Release apr-util 1.3.10 as GA
I built and made check on the following platforms:
- Solaris 8 + 10, Sparc
- SuSE Linux Enterprise 10 32 and 64 Bit
- RedHat Enterprise Linux 5, 64 Bit
Using all combinations of:
apr 1.3.12 / 1.4.2
expat builtin / 2.0.1
dso disable / enable
Berkeley DB 4.8.30 5.0.26 5.1.19 (using a patch for that one)
sqlite 3.7.2
mysql 6.0.2 (only Solaris)
oracle 10.2.0.4.0 (only Solaris)
All builds suceeded, all make check ran fine, except for two cases on
Solaris 10 (Niagara). I reran the tests there and couldn't reproduce the
problem. Tests now running in a loop, so far not reproducible.
Differences to 1.3.9:
CHANGES file is now truncated, i.e. CHANGES from earlier branches are
removed.
Possible improvements:
- Maybe also provide sha1 hashes for the download files
- Minor glitch for out of tree builds
(no regression, fix already committed)
- Support Berkeley DB 5.1 (will do)
- Add notes to build info, that the apr source used
during apu buildconf should contain recent config.(guess|sub)
I also built subversion 1.6.13 and httpd 2.3.8 against this apu.
Builds suceeded, httpd tests OK, subversion tests still running (50%
done, OK).
Details on Solaris 10 test failures
- both in testreslist
- retried both tests more than 100 times, could not reproduce
- build against apr 1.4.2
1) Bus Error
============
pstack shows me
core 'core.testall.4858' of 4858: ./testall
----------------- lwp# 1 / thread# 1 --------------------
ff045578 __pollsys (ffbfefb0, 0, ffbff018, 0, 0, 0) + 8
fefe6ad4 pselect (ffbfefb0, ff0723d0, ff0723d0, 0, ffbff018, 0) + 1c8
fefe6e4c select (0, 0, 0, 0, ffbff080, 18850) + a0
ff2f1c94 apr_sleep (0, 2710, 0, 38820, 38820, 0) + 4c
0001886c my_destructor (0, 387c8, 385a0, 38828, 38820, 18850) + 1c
ff3744b4 destroy_resource (387f8, 38820, 0, 38820, 38820, 38787) + 10
ff3746a4 reslist_maint (387f8, 38470, 38470, 38828, 38820, 18850) + d8
ff374880 apr_reslist_create (0, 3, a, 14, 0, 88b8) + 108
00018a58 test_reslist (2fa60, 0, 98948, 18d44, 0, 2710) + c8
0001382c abts_run_test (2fa60, 18990, 0, 2f160, fec30200, fec30240) + 48
00018d44 testreslist (2f850, 1b528, 0, 0, 0, 18d10) + 34
00013fb4 main (1, 2ebac, ffbff7b4, 2f160, fec30200, fec30240) + 11c
00013260 _start (0, 0, 0, 0, 0, 0) + 5c
All other threads are zombies (dummy_worker) or in
ff04484c __lwp_park (38558, 38528, 0, 0, 1, 0) + 14
except the following thread:
----------------- lwp# 37 / thread# 37 --------------------
ff371464 thread_pool_func (38768, 384b0, 0, 0, 0, 0) + 34
ff2efea0 dummy_worker (38768, fe37c000, 0, 0, ff2efe94, 1) + c
ff0447a8 _lwp_start (0, 0, 0, 0, 0, 0)
GDB says:
Thread 4 (process 70394 ):
#0 0xff045578 in __pollsys () from /lib/libc.so.1
No symbol table info available.
#1 0xff0386a8 in _pollsys () from /lib/libc.so.1
No symbol table info available.
#2 0xfefe6adc in pselect () from /lib/libc.so.1
No symbol table info available.
#3 0xfefe6e54 in select () from /lib/libc.so.1
No symbol table info available.
#4 0xff2f1c9c in apr_sleep (t=10000) at time/unix/time.c:246
tv = {tv_sec = 0, tv_usec = 10000}
#5 0x00018874 in my_destructor (resource=0x0, params=0x387c8,
pool=0x385a0) at
/shared/build/dev/httpd/sources/apr-util/1.3/1.3.10/apr-util-1.3.10/test/testreslist.c:89
No locals.
#6 0xff3744bc in destroy_resource (reslist=0x387f8, res=0x38820) at
/shared/build/dev/httpd/sources/apr-util/1.3/1.3.10/apr-util-1.3.10/misc/apr_reslist.c:135
No locals.
...
So this one seems innocent, but thread 37:
#0 0xff371464 in thread_pool_func (t=0x38768, param=0x384b0) at
/shared/build/dev/httpd/sources/apr-util/1.3/1.3.10/apr-util-1.3.10/misc/apr_thread_pool.c:220
220 APR_RING_REMOVE(elt, link);
(gdb) bt full
#0 0xff371464 in thread_pool_func (t=0x38768, param=0x384b0) at
/shared/build/dev/httpd/sources/apr-util/1.3/1.3.10/apr-util-1.3.10/misc/apr_thread_pool.c:220
task = (apr_thread_pool_task_t *) 0x0
wait = 990831775318016
#1 0xff2efea8 in dummy_worker (opaque=0x38768) at
threadproc/unix/thread.c:142
No locals.
#2 0xff0447b0 in _lwp_start () from /lib/libc.so.1
No symbol table info available.
#3 0xff0447b0 in _lwp_start () from /lib/libc.so.1
No symbol table info available.
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
could be the culprit.
That seems to be more an apr issue though.
2) Endless loop
===============
----------------- lwp# 1 / thread# 1 --------------------
ff2e5788 apr_pool_cleanup_kill (38438, 38478, ff372608, f9, 1, 38ca0) + 34
00018ab8 ???????? (2fa28, 0, 98948, 18d10, 0, 3a98)
000137f8 abts_run_test (2fa28, 1895c, 0, 2f128, fec30200, fec30240) + 48
00018d10 testreslist (2f818, 1b4f0, 0, 0, 0, 18cdc) + 34
00013f80 main (1, 2eb74, ffbff794, 2f128, fec30200, fec30240) + 11c
0001322c _start (0, 0, 0, 0, 0, 0) + 5c
all other threads in lwp_park().
GDB:
Loops in pool cleanup, two snapshots:
[Switching to Thread 1 (LWP 1)]
0xff2e5790 in apr_pool_cleanup_kill (p=0x38438, data=0x38478,
cleanup_fn=0xff372608 <thread_pool_cleanup>) at memory/unix/apr_pools.c:2241
2241 c = c->next;
(gdb) bt full
#0 0xff2e5790 in apr_pool_cleanup_kill (p=0x38438, data=0x38478,
cleanup_fn=0xff372608 <thread_pool_cleanup>) at memory/unix/apr_pools.c:2241
c = (cleanup_t *) 0x38558
lastp = (cleanup_t **) 0x38558
#1 0xff2e5890 in apr_pool_cleanup_run (p=0x38438, data=0x38478,
cleanup_fn=0xff372608 <thread_pool_cleanup>) at memory/unix/apr_pools.c:2298
No locals.
#2 0x00018ac0 in test_reslist (tc=0x2fa28, data=0x0) at
/shared/build/dev/httpd/sources/apr-util/1.3/1.3.10/apr-util-1.3.10/test/testreslist.c:252
i = 25
rv = -13163000
rl = (apr_reslist_t *) 0x38820
params = (my_parameters_t *) 0x387f0
thrp = (apr_thread_pool_t *) 0x38478
thread_info = {{tid = 0, tc = 0x2fa28, reslist = 0x38820,
work_delay_sleep = 15000}, {tid = 1, tc = 0x2fa28, reslist = 0x38820,
work_delay_sleep = 15000}, {
tid = 2, tc = 0x2fa28, reslist = 0x38820, work_delay_sleep =
15000}, {tid = 3, tc = 0x2fa28, reslist = 0x38820, work_delay_sleep =
15000}, {tid = 4, tc = 0x2fa28,
reslist = 0x38820, work_delay_sleep = 15000}, {tid = 5, tc =
0x2fa28, reslist = 0x38820, work_delay_sleep = 15000}, {tid = 6, tc =
0x2fa28, reslist = 0x38820,
work_delay_sleep = 15000}, {tid = 7, tc = 0x2fa28, reslist =
0x38820, work_delay_sleep = 15000}, {tid = 8, tc = 0x2fa28, reslist =
0x38820, work_delay_sleep = 15000},
{tid = 9, tc = 0x2fa28, reslist = 0x38820, work_delay_sleep = 15000},
{tid = 10, tc = 0x2fa28, reslist = 0x38820, work_delay_sleep = 15000},
{tid = 11, tc = 0x2fa28,
reslist = 0x38820, work_delay_sleep = 15000}, {tid = 12, tc =
0x2fa28, reslist = 0x38820, work_delay_sleep = 15000}, {tid = 13, tc =
0x2fa28, reslist = 0x38820,
work_delay_sleep = 15000}, {tid = 14, tc = 0x2fa28, reslist =
0x38820, work_delay_sleep = 15000}, {tid = 15, tc = 0x2fa28, reslist =
0x38820,
work_delay_sleep = 15000}, {tid = 16, tc = 0x2fa28, reslist =
0x38820, work_delay_sleep = 15000}, {tid = 17, tc = 0x2fa28, reslist =
0x38820,
work_delay_sleep = 15000}, {tid = 18, tc = 0x2fa28, reslist =
0x38820, work_delay_sleep = 15000}, {tid = 19, tc = 0x2fa28, reslist =
0x38820,
work_delay_sleep = 15000}, {tid = 20, tc = 0x2fa28, reslist =
0x38820, work_delay_sleep = 15000}, {tid = 21, tc = 0x2fa28, reslist =
0x38820,
work_delay_sleep = 15000}, {tid = 22, tc = 0x2fa28, reslist =
0x38820, work_delay_sleep = 15000}, {tid = 23, tc = 0x2fa28, reslist =
0x38820,
work_delay_sleep = 15000}, {tid = 24, tc = 0x2fa28, reslist =
0x38820, work_delay_sleep = 15000}}
#3 0x00013800 in abts_run_test (ts=0x2fa28, f=0x1895c <test_reslist>,
value=0x0) at
/shared/build/dev/httpd/sources/apr-util/1.3/1.3.10/apr-util-1.3.10/test/abts.c:169
tc = (abts_case *) 0x2fa28
ss = (sub_suite *) 0x31268
#4 0x00018d18 in testreslist (suite=0x2f818) at
/shared/build/dev/httpd/sources/apr-util/1.3/1.3.10/apr-util-1.3.10/test/testreslist.c:271
No locals.
#5 0x00013f88 in main (argc=1, argv=0x2eb74) at
/shared/build/dev/httpd/sources/apr-util/1.3/1.3.10/apr-util-1.3.10/test/abts.c:411
i = 17
list_provided = 0
suite = (abts_suite *) 0x2f818
and
[Switching to Thread 1 (LWP 1)]
apr_pool_cleanup_kill (p=0x38438, data=0x38478, cleanup_fn=0xff372608
<thread_pool_cleanup>) at memory/unix/apr_pools.c:2240
2240 lastp = &c->next;
(gdb) bt full
#0 apr_pool_cleanup_kill (p=0x38438, data=0x38478,
cleanup_fn=0xff372608 <thread_pool_cleanup>) at memory/unix/apr_pools.c:2240
c = (cleanup_t *) 0x38558
lastp = (cleanup_t **) 0x38558
#1 0xff2e5890 in apr_pool_cleanup_run (p=0x38438, data=0x38478,
cleanup_fn=0xff372608 <thread_pool_cleanup>) at memory/unix/apr_pools.c:2298
No locals.
...
and we have:
(gdb) print c
$1 = (cleanup_t *) 0x38558
(gdb) print *c
$2 = {next = 0x38558, data = 0x38558, plain_cleanup_fn = 0x38710,
child_cleanup_fn = 0x38798}
so c == c->next and we will loop endlessly.