summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2016-07-06 11:11:34 -0700
committerIvan Kohler <ivan@freeside.biz>2016-07-06 11:11:34 -0700
commitf2c6964e324bce1113c90af0a09bc92c74f76aee (patch)
treea5b6ace99703dbcf501012b4e92e0dd15b8de25a
parent99d369a8cd98e5e472539738f9c32ad80f25fa03 (diff)
fix intermittent 900 NET OR SSL error, RT#42648
-rw-r--r--FS/FS/Mason.pm31
-rw-r--r--htetc/freeside-base2.conf5
2 files changed, 32 insertions, 4 deletions
diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm
index 2648ef98c..23031766c 100644
--- a/FS/FS/Mason.pm
+++ b/FS/FS/Mason.pm
@@ -561,7 +561,7 @@ if ( -e $addl_handler_use_file ) {
} # end package HTML::Mason::Commands;
-=head1 SUBROUTINE
+=head1 SUBROUTINES
=over 4
@@ -656,6 +656,35 @@ sub mason_interps {
}
+=item child_init
+
+Per-process Apache child initialization code.
+
+Calls srand() to re-seed Perl's PRNG so that multiple children do not generate
+the same "random" numbers.
+
+Works around a Net::SSLeay connection error by creating and deleting an SSL
+context, so subsequent connections do not error out with a CTX_new (900 NET OR
+SSL ERROR).
+
+=cut
+
+sub child_init {
+ #my ($pool, $server) = @_; #the child process pool (APR::Pool) and the server object (Apache2::ServerRec).
+
+ srand();
+
+ #{
+ use Net::SSLeay;
+ package Net::SSLeay;
+ initialize();
+ my $bad_ctx = new_x_ctx();
+ while ( ERR_get_error() ) {}; #print_errs('CTX_new');
+ CTX_free($bad_ctx);
+ #}
+
+}
+
=back
=head1 BUGS
diff --git a/htetc/freeside-base2.conf b/htetc/freeside-base2.conf
index 3eef50cad..1504266cf 100644
--- a/htetc/freeside-base2.conf
+++ b/htetc/freeside-base2.conf
@@ -6,12 +6,11 @@ PerlModule HTML::Mason
PerlSetVar MasonArgsMethod CGI
PerlModule HTML::Mason::ApacheHandler
-PerlChildInitHandler "sub { srand }"
-
PerlRequire "%%%MASON_HANDLER%%%"
+PerlChildInitHandler FS::Mason::child_init
+
#Locale::SubCountry
-#
AddDefaultCharset UTF-8
<Directory %%%FREESIDE_DOCUMENT_ROOT%%%>