stas 2003/11/03 15:31:19
Modified: src/modules/perl mod_perl.c modperl_perl.c modperl_perl.h
Log:
move the ever-growing hash-seed-manipulation ifdef clutter to
modperl_perl.c, bringing mod_perl.c back to a readable form.
Revision Changes Path
1.203 +0 -70 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.202
retrieving revision 1.203
diff -u -u -r1.202 -r1.203
--- mod_perl.c 3 Nov 2003 09:29:49 -0000 1.202
+++ mod_perl.c 3 Nov 2003 23:31:19 -0000 1.203
@@ -9,76 +9,6 @@
#define MP_IS_STARTING (MP_init_status == 1 ? 1 : 0)
#define MP_IS_RUNNING (MP_init_status == 2 ? 1 : 0)
-#if !(PERL_REVISION == 5 && ( PERL_VERSION < 8 || \
- (PERL_VERSION == 8 && PERL_SUBVERSION == 0))) && \
- (defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT))
-#define MP_NEED_HASH_SEED_FIXUP
-#endif
-
-
-#ifdef MP_NEED_HASH_SEED_FIXUP
-static UV MP_init_hash_seed = 0;
-static bool MP_init_hash_seed_set = FALSE;
-#endif
-
-/* see modperl_hash_seed_set() */
-static void modperl_hash_seed_init(apr_pool_t *p)
-{
-#ifdef MP_NEED_HASH_SEED_FIXUP
- char *s;
- /* check if there is a specific hash seed passed via the env var
- * and if that's the case -- use it */
- apr_status_t rv = apr_env_get(&s, "PERL_HASH_SEED", p);
- if (rv == APR_SUCCESS) {
- if (s) {
- while (isSPACE(*s)) s++;
- }
- if (s && isDIGIT(*s)) {
- MP_init_hash_seed = (UV)Atol(s); /* XXX: Atoul()? */
- MP_init_hash_seed_set = TRUE;
- }
- }
-
- /* calculate our own random hash seed */
- if (!MP_init_hash_seed_set) {
- apr_uuid_t *uuid = (apr_uuid_t *)apr_palloc(p, sizeof(apr_uuid_t));
- char buf[APR_UUID_FORMATTED_LENGTH + 1];
- int i;
-
- apr_initialize();
- apr_uuid_get(uuid);
- apr_uuid_format(buf, uuid);
- /* fprintf(stderr, "UUID: %s\n", buf); */
-
- /* XXX: need a better alg to convert uuid string into a seed */
- for (i=0; buf[i]; i++){
- MP_init_hash_seed += (UV)(i+1)*(buf[i]+MP_init_hash_seed);
- }
-
- MP_init_hash_seed_set = TRUE;
- }
-#endif
-}
-
-/* before 5.8.1, perl was using HASH_SEED=0, starting from 5.8.1
- * it randomizes if perl was compiled with ccflags -DUSE_HASH_SEED
- * or -DUSE_HASH_SEED_EXPLICIT, in which case we need to tell perl
- * to use the same seed everywhere */
-static void modperl_hash_seed_set(pTHX)
-{
-#ifdef MP_NEED_HASH_SEED_FIXUP
- if (MP_init_hash_seed_set) {
-#if PERL_REVISION == 5 && PERL_VERSION == 8 && PERL_SUBVERSION == 1
- PL_hash_seed = MP_init_hash_seed;
- PL_hash_seed_set = MP_init_hash_seed_set;
-#else
- PL_rehash_seed = MP_init_hash_seed;
- PL_rehash_seed_set = MP_init_hash_seed_set;
-#endif
- }
-#endif
-}
-
#ifndef USE_ITHREADS
static apr_status_t modperl_shutdown(void *data)
{
1.20 +69 -0 modperl-2.0/src/modules/perl/modperl_perl.c
Index: modperl_perl.c
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -u -r1.19 -r1.20
--- modperl_perl.c 18 Oct 2003 21:01:30 -0000 1.19
+++ modperl_perl.c 3 Nov 2003 23:31:19 -0000 1.20
@@ -160,3 +160,72 @@
}
#endif
}
+
+#if !(PERL_REVISION == 5 && ( PERL_VERSION < 8 || \
+ (PERL_VERSION == 8 && PERL_SUBVERSION == 0))) && \
+ (defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT))
+#define MP_NEED_HASH_SEED_FIXUP
+#endif
+
+#ifdef MP_NEED_HASH_SEED_FIXUP
+static UV MP_init_hash_seed = 0;
+static bool MP_init_hash_seed_set = FALSE;
+#endif
+
+/* see modperl_hash_seed_set() */
+void modperl_hash_seed_init(apr_pool_t *p)
+{
+#ifdef MP_NEED_HASH_SEED_FIXUP
+ char *s;
+ /* check if there is a specific hash seed passed via the env var
+ * and if that's the case -- use it */
+ apr_status_t rv = apr_env_get(&s, "PERL_HASH_SEED", p);
+ if (rv == APR_SUCCESS) {
+ if (s) {
+ while (isSPACE(*s)) s++;
+ }
+ if (s && isDIGIT(*s)) {
+ MP_init_hash_seed = (UV)Atol(s); /* XXX: Atoul()? */
+ MP_init_hash_seed_set = TRUE;
+ }
+ }
+
+ /* calculate our own random hash seed */
+ if (!MP_init_hash_seed_set) {
+ apr_uuid_t *uuid = (apr_uuid_t *)apr_palloc(p, sizeof(apr_uuid_t));
+ char buf[APR_UUID_FORMATTED_LENGTH + 1];
+ int i;
+
+ apr_initialize();
+ apr_uuid_get(uuid);
+ apr_uuid_format(buf, uuid);
+ /* fprintf(stderr, "UUID: %s\n", buf); */
+
+ /* XXX: need a better alg to convert uuid string into a seed */
+ for (i=0; buf[i]; i++){
+ MP_init_hash_seed += (UV)(i+1)*(buf[i]+MP_init_hash_seed);
+ }
+
+ MP_init_hash_seed_set = TRUE;
+ }
+#endif
+}
+
+/* before 5.8.1, perl was using HASH_SEED=0, starting from 5.8.1
+ * it randomizes if perl was compiled with ccflags -DUSE_HASH_SEED
+ * or -DUSE_HASH_SEED_EXPLICIT, in which case we need to tell perl
+ * to use the same seed everywhere */
+void modperl_hash_seed_set(pTHX)
+{
+#ifdef MP_NEED_HASH_SEED_FIXUP
+ if (MP_init_hash_seed_set) {
+#if PERL_REVISION == 5 && PERL_VERSION == 8 && PERL_SUBVERSION == 1
+ PL_hash_seed = MP_init_hash_seed;
+ PL_hash_seed_set = MP_init_hash_seed_set;
+#else
+ PL_rehash_seed = MP_init_hash_seed;
+ PL_rehash_seed_set = MP_init_hash_seed_set;
+#endif
+ }
+#endif
+}
1.12 +4 -0 modperl-2.0/src/modules/perl/modperl_perl.h
Index: modperl_perl.h
===================================================================
RCS file: /home/cvs/modperl-2.0/src/modules/perl/modperl_perl.h,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -u -r1.11 -r1.12
--- modperl_perl.h 18 Oct 2003 21:01:30 -0000 1.11
+++ modperl_perl.h 3 Nov 2003 23:31:19 -0000 1.12
@@ -22,4 +22,8 @@
void modperl_perl_destruct(PerlInterpreter *perl);
+void modperl_hash_seed_init(apr_pool_t *p);
+
+void modperl_hash_seed_set(pTHX);
+
#endif /* MODPERL_PERL_H */