We recently merged 2.4.17 and saw some bus errors on hp/ia64 and
solaris/sparc64. Selectively backing things out, it appears that the
SO_REUSEPORT patch causes the worker_score to no longer (necessarily)
be double-word aligned.

I'm able to hit the same thing with the httpd-2.4.x branch.  I have a
particular config that I can start with:

/bin/apachectl  -f conf/testcase.conf -k start -c "ServerLimit 1" -DNO_DETACH
or
/bin/apachectl  -f conf/testcase.conf -k start -c "ServerLimit 2" -DNO_DETACH

And the former will get a bus error and the latter will not.

(stuff from my draft email below is not vanilla httpd-2.4.x)

t@1 (l@1) program terminated by signal BUS (Bus Error)
Current function is update_child_status_internal
  479           ws->last_used = apr_time_now();
(dbx) where
current thread: t@1
=>[1] update_child_status_internal(child_num = 0, thread_num = 0,
status = 0, c = (nil), r = (nil)), line 479 in "scoreboard.c"
  [2] ap_update_child_status_from_indexes(child_num = 0, thread_num =
0, status = 0, r = (nil)), line 529 in "scoreboard.c"
  [3] server_main_loop(remaining_children_to_start = 0, num_buckets =
1), line 1879 in "worker.c"
  [4] worker_run(_pconf = 0x100205f68, plog = 0x100234158, s =
0x10020e340), line 2056 in "worker.c"
  [5] ap_run_mpm(0x100205f68, 0x100234158, 0x10020e340, 0x5, 0x0,
0x0), at 0x10005a8a4
  [6] main(argc = 7, argv = 0xffffffff7ffff7f8), line 878 in "main.c"
(dbx)
(dbx) print ws
ws = 0xffffffff7bb00044
(dbx) print &(ws->last_used)
&ws->last_used = 0xffffffff7bb00094

(both of these are unaligned, when I log their values w/o the
SO_REUSEPORT they're always aligned)

Experimentation is SLOW on my sparc system, so I thought I'd throw up
a flare for help sooner rather than later in case anyone has a clue.
I hope to be able to try to back out some more things on the vanilla
httpd-2.4.x

-- 
Eric Covener
cove...@gmail.com

Reply via email to