You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by "Richard.Hall" <Ri...@ingenta.com> on 2008/06/09 14:14:55 UTC

[users@httpd] 1.3.41 http_main.c old_listeners uninitialized

First post, apologies for any breaches of netiquette.

Searched the archives as best I could, can't see anything directly
relevant (but my archive-searching abilities are notoriously poor.)

Trying to compile Apache 1.3.41 + various modules. on SPARC Solaris 8, gcc
3.4.2. Compiles ok, but it crashes on startup. (Or at least it did for
quite a lot of attempts, although it now seems to survive.)

I'll leave out the diagnostics for the moment, but if anyone wants them I
can try to dredge up what I've kept. Suffice it to say, my thrashing about
in the code led me to the following in main/http_main.c, lines 4026-4033

> static listen_rec *old_listeners;
>
> /* unfortunately copy_listeners may be called before listeners is a ring */
> static void copy_listeners(pool *p)
> {
>     listen_rec *lr;
>
>     ap_assert(old_listeners == NULL);


It concerns me that old_listeners is uninitialized. So much so that I made
the following change:-

$ diff src/main/http_main.c.orig src/main/http_main.c
4026c4026
< static listen_rec *old_listeners;
---
> static listen_rec *old_listeners = (listen_rec *)0x12345;

(i.e. give it a completely(?) duff value), and I can now consistently get

[Mon Jun  9 12:34:29 2008] file http_main.c, line 4033, assertion
"old_listeners == NULL" failed

in the error_log. (The initial crashes weren't giving me that; OTOH they
weren't giving me the SIGABRT that ap_assert should lead to either, but a
'SIGBUS BUS_ADRALN; go figure)


So - the fix seems simple ...

$ diff src/main/http_main.c.orig src/main/http_main.c
4026c4026
< static listen_rec *old_listeners;
---
> static listen_rec *old_listeners = NULL;

and I haven't been able to break it since (admittedly with limited
testing) ... BUT BUT BUT .... this particular bit of code looks really old
- can I really be the first person ever to hit this? OK, there's a fair
chance that uninitialized data gets set to zero, but no-one? ever?

Please feel free to point out where I am being an idiot.

TIA,
 Richard


---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org


Re: [users@httpd] 1.3.41 http_main.c old_listeners uninitialized

Posted by "Richard.Hall" <Ri...@ingenta.com>.
On Mon, 9 Jun 2008, Richard.Hall wrote:

> First post, apologies for any breaches of netiquette.

Second post, apologies for following up on my own post so quickly!!, but
to avoid any confusion ...

[...]

> So - the fix seems simple ...
>
> $ diff src/main/http_main.c.orig src/main/http_main.c
> 4026c4026
> < static listen_rec *old_listeners;
> ---
> > static listen_rec *old_listeners = NULL;


... except that that is the line number after configuring/building. The
_original_ line number is 3966.

Richard


---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org