>> wow, I didn't expect to see this followed up upon. thanks.
>
>
> maybe httpd developers should be stranded in airports more often...
> also, several weeks ago somebody was complaining to me about various
> things they didn't like about Apache 2... one of the ones I took note of
> was having httpd -V display the name of the MPM... so when I saw your
> old post I could visualize that to-do getting marked DONE with little
> effort on my part :)
:)
>
>>>> Server version: Apache/2.1.0-dev
>>>> Server built: Aug 12 2003 02:25:22
>>>> Server's Module Magic Number: 20030213:1
>>>> Architecture: 32-bit
>>>> Server MPM: Prefork
>>>
>>>
>>>
>>>
>>> too bad ap_show_mpm doesn't list this like other modules :(
>>> ("prefork.c" or "worker.c")... the major source file name is what you
>>> need in <IfModule FOO>
>>
>>
>>
>> hmm... odd. I guess I'll take your word for it that doesn't work now
oh, I see what you mean now - <IfModule prefork.c> works but httpd -V
doesn't show prefork.c.
>
>
> very minor issue... forget about it :)
k :)
>
>> but if it doesn't I'd be happy to try and make it work if there is a
>> consensus that it would be a good thing. the only issue I can see is
>> something mentioned in the original thread on test-dev@ - that
>> attributes like being threaded (or not) are generally more useful than
>> the more simplistic approach of looking for worker.c.
>>
>> http://marc.theaimsgroup.com/?l=apache-test-dev&m=105795076610731&w=2
>
>
> do whatever Stas said w.r.t. that :)
well, I wasn't taling about the Apache-Test stuff, per se, but rather what
Bill had to say about querying for specific mpm's versus threads in general,
which I think is a very good point - I actually care very little in my code
whether apache is using worker or leader, it's threads or not that's
important (to me anyway :) thus the below...
>
>> nevertheless, I'd be happy to do the scut work here and code both up
>> (httpd -V and IfDefine/IfModule stuff) if some agreement can be
>> reached on exactly what it all ought to look like.
>
>
> scratch the Ifdefine issue for now... I don't think it is so
> important... at worst, we just have to change the definition of the
> MPM_NAME symbol in each MPM's header file
contrary to your advice, I took the initiative and coded <IfThreaded>
against 2.1. basically, this would allow you to group threaded directives
together. so, instead of this
<IfModule worker.c>
ThreadsPerChild 5
</IfModule>
<IfModule perchild.c>
MaxThreadsPerChild 5
</IfModule>
<IfModule prefork.c>
MaxClients 5
</IfModule>
and so on for every threaded mpm, we could have
<IfThreaded>
MaxThreadsPerChild 5
</IfThreaded>
<IfModule prefork.c>
MaxClients 5
</IfModule>
I toyed with the idea of adding <IfNotThreaded> to parallel the concept, but
I wasn't sure about it - I figured I'd see how the initial idea went over
first :)
so, patch attached and feedback welcome. I'll work on the real httpd -V
stuff later this afternoon.
--Geoff
Index: server/core.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/server/core.c,v
retrieving revision 1.252
diff -u -r1.252 core.c
--- server/core.c 21 Nov 2003 15:02:04 -0000 1.252
+++ server/core.c 2 Dec 2003 16:54:26 -0000
@@ -90,6 +90,7 @@
#include "mod_core.h"
#include "mod_proxy.h"
#include "ap_listen.h"
+#include "ap_mpm.h"
/* LimitXMLRequestBody handling */
#define AP_LIMIT_UNSET ((long) -1)
@@ -1928,6 +1929,45 @@
}
}
+static const char *start_ifthreaded(cmd_parms *cmd, void *mconfig, const char *arg)
+{
+ const char *endp = ap_strrchr_c(arg, '>');
+ int mpm_query_info;
+ apr_status_t retval;
+
+ if (endp == NULL) {
+ return unclosed_directive(cmd);
+ }
+
+ arg = apr_pstrndup(cmd->pool, arg, endp - arg);
+
+ if (arg[0]) {
+ return "<IfThreaded> takes no arguments";
+ }
+
+ retval = ap_mpm_query(AP_MPMQ_IS_THREADED, &mpm_query_info);
+
+ if (retval != APR_SUCCESS) {
+ return apr_pstrcat(cmd->pool, "<IfThreaded> could not query ",
+ ap_show_mpm(), " MPM for threads", NULL);
+ }
+
+ if (mpm_query_info) {
+ ap_directive_t *parent = NULL;
+ ap_directive_t *current = NULL;
+ const char *retval;
+
+ retval = ap_build_cont_config(cmd->pool, cmd->temp_pool, cmd,
+ ¤t, &parent, "<IfThreaded");
+ *(ap_directive_t **)mconfig = current;
+ return retval;
+ }
+ else {
+ *(ap_directive_t **)mconfig = NULL;
+ return ap_soak_end_container(cmd, "<IfThreaded");
+ }
+}
+
/* httpd.conf commands... beginning with the <VirtualHost> business */
static const char *virtualhost_section(cmd_parms *cmd, void *dummy,
@@ -3073,6 +3113,8 @@
"Container for directives based on existance of specified modules"),
AP_INIT_TAKE1("<IfDefine", start_ifdefine, NULL, EXEC_ON_READ | OR_ALL,
"Container for directives based on existance of command line defines"),
+AP_INIT_RAW_ARGS("<IfThreaded", start_ifthreaded, NULL, EXEC_ON_READ | OR_ALL,
+ "Container for directives based on existance of a threaded MPM"),
AP_INIT_RAW_ARGS("<DirectoryMatch", dirsection, (void*)1, RSRC_CONF,
"Container for directives affecting resources located in the "
"specified directories"),