httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Eric Prud'hommeaux" <e...@w3.org>
Subject Re: Quick Question: module structure initialization
Date Mon, 26 Oct 1998 21:32:30 GMT
On Sun, 25 Oct 1998, Marc Slemko wrote:

> On Sat, 24 Oct 1998, Eric Prud'hommeaux wrote:
> 
> > On Sat, 24 Oct 1998, Ralf S. Engelschall wrote:
> > 
> > > 
> > > Just a quick question:
> > > 
> > > Is it correct that ANSI C _guarantees_ C compilers initialize missing entries
> > > (at the end) in structure initializations like our "module" structure to
> > > 0/NULL?
> > > 
> > > In other words: Is it safe when I add (inside the mod_ssl patch) two more hook
> > > pointers to the "module" structure definition in http_config.h but the module
> > > sources contain no explicit additional NULLs in their initialization of the
> > > "module" structure?
> > > 
> > > I hope this is the case because else it would be not possible to extend the
> > > set of hooks without requireing third party modules to change their structure,
> > > too. But NULLs for the additional hooks are needed or the stuff would
> > > segfault...
> > 
> > Could this be handled in the future (2.0) by having a macro that went into
> > the end of the module declaration?
> 
> While I don't really know that this is a huge issue (since they are NULL
> if they aren't there), it does make it look a little ugly with various
> handlers tacked on the end.

I was looking for a non intrusive (not patch based) way to insure the
length of the static module structure. If a mechanism is needed to store
extra info at a specific offset in everyone's modules, then this space
needs to be pre-allocated at compile time.  While a patch to http_config.h
may work for one such extension, there will be collisions it two
extensions attempt to reserve space at specific offsets in the module
structure.

> What you suggest could be one way to deal with it, perhaps with a few
> modifications.  But the thing that would have to be decided first is if we
> even want to keep up with the (exposed) module structure idea; in a lot of
> ways it would be cleaner to just make modules register their phases with
> explicit function calls.  Internally it could be implemented the same, but
> the struct isn't visable any longer then.

If folks favor an ephemoral module interface, it may be better to malloc
the structure once it's size is known, or have an interface like this:

static table ap_xtraModuleStuff;

ap_put (module * pModule, char * key, void * value);
ap_get (module * pModule, char * key);

but I preffer the more direct approach because you don't have to worry
about allocations stored in the void *.

-eric


Mime
View raw message