[freeside-commits] freeside/FS/FS/Cron bill.pm,1.5,1.6

Ivan,,, ivan at wavetail.420.am
Fri Jul 13 16:52:24 PDT 2007


Update of /home/cvs/cvsroot/freeside/FS/FS/Cron
In directory wavetail:/tmp/cvs-serv6052/FS/FS/Cron

Modified Files:
	bill.pm 
Log Message:
fix race condition where ->apply_payments_and_credits could double-apply in rare cases

Index: bill.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Cron/bill.pm,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- bill.pm	26 Jun 2007 15:37:18 -0000	1.5
+++ bill.pm	13 Jul 2007 23:52:21 -0000	1.6
@@ -80,14 +80,16 @@
   
   my($cust_main,%saw);
   foreach $cust_main ( @cust_main ) {
+
+    my $custnum = $cust_main->custnum;
   
     # $^T not $time because -d is for pre-printing invoices
     foreach my $cust_pkg (
       grep { $_->expire && $_->expire <= $^T } $cust_main->ncancelled_pkgs
     ) {
       my $error = $cust_pkg->cancel;
-      warn "Error cancelling expired pkg ". $cust_pkg->pkgnum. " for custnum ".
-           $cust_main->custnum. ": $error"
+      warn "Error cancelling expired pkg ". $cust_pkg->pkgnum.
+           " for custnum $custnum: $error"
         if $error;
     }
     # $^T not $time because -d is for pre-printing invoices
@@ -102,8 +104,7 @@
       my $action = $cust_pkg->part_pkg->option('recur_action') || 'suspend';
       my $error = $cust_pkg->$action();
       warn "Error suspending package ". $cust_pkg->pkgnum.
-           " for custnum ". $cust_main->custnum.
-           ": $error"
+           " for custnum $custnum: $error"
         if $error;
     }
   
@@ -111,14 +112,16 @@
                                   'invoice_time' => $invoice_time,
                                   'resetup'      => $opt{'s'},
                                 );
-    warn "Error billing, custnum ". $cust_main->custnum. ": $error" if $error;
+    warn "Error billing, custnum $custnum: $error" if $error;
   
-    $cust_main->apply_payments_and_credits;
+    $error = $cust_main->apply_payments_and_credits;
+    warn "Error applying payments and credits, custnum $custnum: $error"
+      if $error;
   
     $error = $cust_main->collect( 'invoice_time' => $time,
                                   'freq'         => $opt{'freq'},
                                 );
-    warn "Error collecting, custnum". $cust_main->custnum. ": $error" if $error;
+    warn "Error collecting, custnum $custnum: $error" if $error;
   
   }
 



More information about the freeside-commits mailing list