[interchange-cvs] interchange - markj modified 2 files
interchange-cvs at icdevgroup.org
interchange-cvs at icdevgroup.org
Fri Mar 20 22:15:56 UTC 2009
User: markj
Date: 2009-03-20 22:15:56 GMT
Modified: lib/Vend Payment.pm Server.pm
Log:
* Moved DBI InactiveDestroy code into its own subroutine to keep it from
propagating out with every need for a fork.
* Added newline to alarm die to keep additional perl diagnostics from
displaying in the error message.
* Allowed global_timeout_msg to be set using the MV_PAYMENT_* settings, to
be consistent with the same offering for setting global_timeout itself.
Revision Changes Path
2.23 interchange/lib/Vend/Payment.pm
rev 2.23, prev_rev 2.22
Index: Payment.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Payment.pm,v
retrieving revision 2.22
retrieving revision 2.23
diff -u -r2.22 -r2.23
--- Payment.pm 20 Mar 2009 16:40:34 -0000 2.22
+++ Payment.pm 20 Mar 2009 22:15:56 -0000 2.23
@@ -1,6 +1,6 @@
# Vend::Payment - Interchange payment processing routines
#
-# $Id: Payment.pm,v 2.22 2009-03-20 16:40:34 markj Exp $
+# $Id: Payment.pm,v 2.23 2009-03-20 22:15:56 markj Exp $
#
# Copyright (C) 2002-2009 Interchange Development Group
# Copyright (C) 1996-2002 Red Hat, Inc.
@@ -23,7 +23,7 @@
package Vend::Payment;
require Exporter;
-$VERSION = substr(q$Revision: 2.22 $, 10);
+$VERSION = substr(q$Revision: 2.23 $, 10);
@ISA = qw(Exporter);
@@ -400,19 +400,9 @@
my $pipe = IO::Pipe->new;
unless ($pid = fork) {
-
+ Vend::Server::child_process_dbi_prep();
$pipe->writer;
-
- eval {
- my %d = DBI->installed_drivers;
- for my $h (values %d) {
- $_->{InactiveDestroy} = 1
- for grep { defined } @{ $h->{ChildHandles} };
- }
- };
-
my %rv = $sub->($pay_opt);
-
$pipe->print( ::uneval(\%rv) );
exit;
}
@@ -420,8 +410,9 @@
$pipe->reader;
my $to_msg = $pay_opt->{global_timeout_msg}
+ || charge_param('global_timeout_msg')
|| 'Due to technical difficulties, your order could not be processed.';
- local $SIG{ALRM} = sub { die $to_msg };
+ local $SIG{ALRM} = sub { die "$to_msg\n" };
alarm $timeout;
wait;
2.102 interchange/lib/Vend/Server.pm
rev 2.102, prev_rev 2.101
Index: Server.pm
===================================================================
RCS file: /var/cvs/interchange/lib/Vend/Server.pm,v
retrieving revision 2.101
retrieving revision 2.102
diff -u -r2.101 -r2.102
--- Server.pm 11 Mar 2009 20:39:04 -0000 2.101
+++ Server.pm 20 Mar 2009 22:15:56 -0000 2.102
@@ -1,6 +1,6 @@
# Vend::Server - Listen for Interchange CGI requests as a background server
#
-# $Id: Server.pm,v 2.101 2009-03-11 20:39:04 markj Exp $
+# $Id: Server.pm,v 2.102 2009-03-20 22:15:56 markj Exp $
#
# Copyright (C) 2002-2009 Interchange Development Group
# Copyright (C) 1996-2002 Red Hat, Inc.
@@ -26,7 +26,7 @@
package Vend::Server;
use vars qw($VERSION);
-$VERSION = substr(q$Revision: 2.101 $, 10);
+$VERSION = substr(q$Revision: 2.102 $, 10);
use Cwd;
use POSIX qw(setsid strftime);
@@ -3099,9 +3099,28 @@
}
sub sever_database {
+ # Keep connection closings on the client from closing the
+ # database server, too.
+ child_process_dbi_prep();
+
+ # Clear any cached DBI handles
+ reset_per_fork();
+
+ # Prep new database connections for severed server
+ Vend::Data::open_database(1);
+ while (my ($db, $db_ref) = each %Vend::Database) {
+ delete $Vend::Interpolate::Db{$db};
+ $db_ref->close_table;
+ undef $db_ref->[$Vend::Table::DBI::DBI];
+ }
+
+ return;
+}
+
+sub child_process_dbi_prep {
# Because all clients with a common database connection will share
- # the same db server, we want our severed server (client) not to
- # destroy the database server when it disconnects.
+ # the same db server, we want the child process not to destroy the
+ # database server when it disconnects.
eval {
my %d = DBI->installed_drivers;
for my $h (values %d) {
@@ -3116,17 +3135,6 @@
)
if ($@);
- # Clear any cached DBI handles
- reset_per_fork();
-
- # Prep new database connections for severed server
- Vend::Data::open_database(1);
- while (my ($db, $db_ref) = each %Vend::Database) {
- delete $Vend::Interpolate::Db{$db};
- $db_ref->close_table;
- undef $db_ref->[$Vend::Table::DBI::DBI];
- }
-
return;
}
More information about the interchange-cvs
mailing list