[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