Hi Yann,
Am 03.01.2018 um 11:07 schrieb Yann Ylavic:
On Wed, Jan 3, 2018 at 5:00 AM, Rainer Jung <rainer.j...@kippdata.de> wrote:
I did a check on Solaris 10 Sparc. Looks good as well:
Thanks Rainer, the PR is about Sparc so this is quite valuable return.
I first thought it was some concurrency issues (in mpm_event) specific
to Solaris Sparc until I found this..
- r1819856 (without the additional check and without the fix): no hang in
testpoll
- r1819857 (with the additional check but still without the fix): hangs in
testpoll in pollset_wakeup, more precisely in the new for loop in iteration
2 of 2 and there in the call to apr_pollset_wakeup().
Don't you mean that the hang was in the second call to apr_pollset_poll()?
Yes, sorry.
I don't really expect apr_pollset_wakeup() to block unless the pipe is
full, which'd be a capacity of one byte only here...
The hang was in the following stack:
(gdb) bt full
#0 0xff0cbcb4 in _portfs () from /lib/libc.so.1
No symbol table info available.
#1 0xff046230 in port_getn () from /lib/libc.so.1
No symbol table info available.
#2 0xff374b18 in call_port_getn (port=61, list=0x1aa418, max=2,
nget=0xffbff558, timeout=-1) at .../poll/unix/port.c:110
tv = {tv_sec = 0, tv_nsec = 0}
tvptr = <optimized out>
ret = <optimized out>
rv = 0
#3 0xff374d34 in impl_pollset_poll (pollset=0x1aa3a8,
timeout=<optimized out>, num=0xffbff634, descriptors=0xffbff638)
at .../poll/unix/port.c:400
fd = <optimized out>
ret = <optimized out>
i = <optimized out>
j = <optimized out>
nget = 1
ep = <optimized out>
rv = <optimized out>
fp = <optimized out>
#4 0xff3743ac in apr_pollset_poll (pollset=0x1aa3a8, timeout=-1,
num=num@entry=0xffbff634, descriptors=descriptors@entry=0xffbff638)
at .../poll/unix/pollset.c:246
No locals.
=> So apr_pollset_poll()
#5 0x00028ffc in pollset_wakeup (tc=0xffbff6b0, data=0x0) at
.../test/testpoll.c:805
rv = <optimized out>
socket_pollfd = {p = 0xd1fd0, desc_type = APR_POLL_SOCKET,
reqevents = 1, rtnevents = 1, desc = {f = 0x1c20c0, s = 0x1c20c0},
client_data = 0x1c20c0}
pollset = 0x1aa3a8
num = 0
descriptors = 0x0
i = 1
=> So i==1, second loop iteration
#6 0x000184d0 in abts_run_test (ts=ts@entry=0xd6dd8, f=0x28f64
<pollset_wakeup>, value=value@entry=0x0) at .../test/abts.c:171
tc = {failed = 0, suite = 0xd6308}
ss = 0xd6308
#7 0x000292e4 in testpoll (suite=0xd6dd8) at .../test/testpoll.c:956
No locals.
#8 0x00046944 in main (argc=2, argv=<optimized out>) at .../test/abts.c:429
i = <optimized out>
list_provided = <optimized out>
suite = 0xd6dd8
- r1819858 (with the additional check and with the fix): no hang in testpoll
- r1819902 (head of trunk): no hang in testpoll
Thanks for finding and fixing this!
Happy new year,
Best wishes to all!
Regards,
Yann.