dougm 00/04/15 18:33:57
Modified: src/modules/perl mod_perl.c modperl_config.c
modperl_config.h modperl_interp.c modperl_interp.h
modperl_types.h
Log:
interpreter pool is only useful #ifdef USE_ITHREADS
Revision Changes Path
1.6 +3 -6 modperl-2.0/src/modules/perl/mod_perl.c
Index: mod_perl.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/mod_perl.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- mod_perl.c 2000/04/16 00:35:32 1.5
+++ mod_perl.c 2000/04/16 01:33:56 1.6
@@ -23,7 +23,7 @@
perl_run(perl);
- modperl_interp_pool_init(s, p, perl);
+ modperl_interp_init(s, p, perl);
}
void modperl_init(server_rec *s, ap_pool_t *p)
@@ -46,17 +46,13 @@
{
/* XXX: should be pre_config hook or 1.xx logic */
ap_hook_open_logs(modperl_hook_init, NULL, NULL, HOOK_MIDDLE);
-
- /* XXX: should only bother selecting an interpreter
- * if one is needed for the request
- */
- ap_hook_post_read_request(modperl_interp_select, NULL, NULL, HOOK_FIRST);
}
static command_rec modperl_cmds[] = {
#ifdef MP_TRACE
MP_SRV_CMD_TAKE1("PerlTrace", trace, "Trace level"),
#endif
+#ifdef USE_ITHREADS
MP_SRV_CMD_TAKE1("PerlInterpStart", interp_start,
"Number of Perl interpreters to start"),
MP_SRV_CMD_TAKE1("PerlInterpMax", interp_max,
@@ -65,6 +61,7 @@
"Max number of spare Perl interpreters"),
MP_SRV_CMD_TAKE1("PerlInterpMinSpare", interp_min_spare,
"Min number of spare Perl interpreters"),
+#endif
{ NULL },
};
1.4 +11 -2 modperl-2.0/src/modules/perl/modperl_config.c
Index: modperl_config.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- modperl_config.c 2000/04/16 00:53:33 1.3
+++ modperl_config.c 2000/04/16 01:33:56 1.4
@@ -19,6 +19,8 @@
void *modperl_create_srv_config(ap_pool_t *p, server_rec *s)
{
modperl_srv_config_t *scfg = modperl_srv_config_new(p);
+
+#ifdef USE_ITHREADS
scfg->interp_pool_cfg =
(modperl_interp_pool_config_t *)
ap_pcalloc(p, sizeof(*scfg->interp_pool_cfg));
@@ -29,6 +31,8 @@
scfg->interp_pool_cfg->min_spare = 3;
scfg->interp_pool_cfg->max = 5;
+#endif /* USE_ITHREADS */
+
return scfg;
}
@@ -37,14 +41,16 @@
void *modperl_merge_srv_config(ap_pool_t *p, void *basev, void *addv)
{
+#if 0
modperl_srv_config_t
*base = (modperl_srv_config_t *)basev,
*add = (modperl_srv_config_t *)addv,
*mrg = modperl_srv_config_new(p);
- merge_item(mip);
-
return mrg;
+#else
+ return basev;
+#endif
}
#define MP_CONFIG_BOOTSTRAP(parms) \
@@ -56,6 +62,7 @@
return NULL;
}
+#ifdef USE_ITHREADS
#define MP_IMP_INTERP_POOL_CFG(item) \
const char *modperl_cmd_interp_##item(cmd_parms *parms, \
@@ -74,3 +81,5 @@
MP_IMP_INTERP_POOL_CFG(max);
MP_IMP_INTERP_POOL_CFG(max_spare);
MP_IMP_INTERP_POOL_CFG(min_spare);
+
+#endif /* USE_ITHREADS */
1.5 +2 -0 modperl-2.0/src/modules/perl/modperl_config.h
Index: modperl_config.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_config.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- modperl_config.h 2000/04/16 00:35:32 1.4
+++ modperl_config.h 2000/04/16 01:33:56 1.5
@@ -18,10 +18,12 @@
void *dummy, char *arg)
MP_DECLARE_SRV_CMD(trace);
+#ifdef USE_ITHREADS
MP_DECLARE_SRV_CMD(interp_start);
MP_DECLARE_SRV_CMD(interp_max);
MP_DECLARE_SRV_CMD(interp_max_spare);
MP_DECLARE_SRV_CMD(interp_min_spare);
+#endif
#define MP_SRV_CMD_TAKE1(name, item, desc) \
{ name, modperl_cmd_##item, NULL, \
1.6 +26 -4 modperl-2.0/src/modules/perl/modperl_interp.c
Index: modperl_interp.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_interp.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- modperl_interp.c 2000/04/16 00:35:32 1.5
+++ modperl_interp.c 2000/04/16 01:33:56 1.6
@@ -5,6 +5,8 @@
* but it will do for proof-of-concept
*/
+#ifdef USE_ITHREADS
+
modperl_interp_t *modperl_interp_new(ap_pool_t *p,
modperl_interp_pool_t *mip,
PerlInterpreter *perl)
@@ -201,8 +203,8 @@
MUTEX_UNLOCK(&mip->mip_lock);
}
-void modperl_interp_pool_init(server_rec *s, ap_pool_t *p,
- PerlInterpreter *perl)
+void modperl_interp_init(server_rec *s, ap_pool_t *p,
+ PerlInterpreter *perl)
{
pTHX;
MP_dSCFG(s);
@@ -218,13 +220,11 @@
MUTEX_INIT(&mip->mip_lock);
COND_INIT(&mip->available);
-#ifdef USE_ITHREADS
for (i=0; i<mip->cfg->start; i++) {
modperl_interp_t *interp = modperl_interp_new(p, mip, perl);
modperl_interp_pool_add(mip, interp);
}
-#endif
MP_TRACE_i(MP_FUNC, "parent == 0x%lx "
"start=%d, max=%d, min_spare=%d, max_spare=%d\n",
@@ -235,6 +235,12 @@
ap_register_cleanup(p, (void*)mip,
modperl_interp_pool_destroy, ap_null_cleanup);
+
+ /* XXX: should only bother selecting an interpreter
+ * if one is needed for the request
+ */
+ ap_hook_post_read_request(modperl_interp_select, NULL, NULL, HOOK_FIRST);
+
scfg->mip = mip;
}
@@ -291,3 +297,19 @@
return OK;
}
+
+#else
+
+void modperl_interp_init(server_rec *s, ap_pool_t *p,
+ PerlInterpreter *perl)
+{
+ MP_dSCFG(s);
+ scfg->perl = perl;
+}
+
+ap_status_t modperl_interp_cleanup(void *data)
+{
+ return APR_SUCCESS;
+}
+
+#endif /* USE_ITHREADS */
1.4 +9 -6 modperl-2.0/src/modules/perl/modperl_interp.h
Index: modperl_interp.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_interp.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- modperl_interp.h 2000/04/15 22:43:10 1.3
+++ modperl_interp.h 2000/04/16 01:33:56 1.4
@@ -1,24 +1,25 @@
#ifndef MODPERL_INTERP_H
#define MODPERL_INTERP_H
+void modperl_interp_init(server_rec *s, ap_pool_t *p,
+ PerlInterpreter *perl);
+
+ap_status_t modperl_interp_cleanup(void *data);
+
+#ifdef USE_ITHREADS
+
modperl_interp_t *modperl_interp_new(ap_pool_t *p,
modperl_interp_pool_t *mip,
PerlInterpreter *perl);
void modperl_interp_destroy(modperl_interp_t *interp);
-ap_status_t modperl_interp_cleanup(void *data);
-
modperl_interp_t *modperl_interp_get(server_rec *s);
ap_status_t modperl_interp_unselect(void *data);
int modperl_interp_select(request_rec *r);
-
-void modperl_interp_pool_init(server_rec *s, ap_pool_t *p,
- PerlInterpreter *perl);
-
ap_status_t modperl_interp_pool_destroy(void *data);
void modperl_interp_pool_add(modperl_interp_pool_t *mip,
@@ -26,5 +27,7 @@
void modperl_interp_pool_remove(modperl_interp_pool_t *mip,
modperl_interp_t *interp);
+
+#endif
#endif /* MODPERL_INTERP_H */
1.5 +8 -0 modperl-2.0/src/modules/perl/modperl_types.h
Index: modperl_types.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_types.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- modperl_types.h 2000/04/16 00:35:32 1.4
+++ modperl_types.h 2000/04/16 01:33:56 1.5
@@ -23,6 +23,8 @@
/* mod_perl structures */
+#ifdef USE_ITHREADS
+
typedef struct modperl_interp_t modperl_interp_t;
typedef struct modperl_interp_pool_t modperl_interp_pool_t;
@@ -51,6 +53,8 @@
modperl_interp_t *head, *tail;
};
+#endif /* USE_ITHREADS */
+
typedef struct {
MpAV *handlers[MP_PROCESS_NUM_HANDLERS];
} modperl_process_config_t;
@@ -70,8 +74,12 @@
MpAV *handlers[MP_PER_SRV_NUM_HANDLERS];
modperl_process_config_t *process_cfg;
modperl_connection_config_t *connection_cfg;
+#ifdef USE_ITHREADS
modperl_interp_pool_t *mip;
modperl_interp_pool_config_t *interp_pool_cfg;
+#else
+ PerlInterpreter *perl;
+#endif
int flags;
} modperl_srv_config_t;