LP #1075167: Serials: Avoid infinite loop in holdings summarization
authorLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Wed, 9 Jan 2013 21:20:39 +0000 (16:20 -0500)
committerDan Wells <dbw2@calvin.edu>
Thu, 10 Jan 2013 12:53:54 +0000 (07:53 -0500)
When receiving items with unworkable combinations of holdings and
patterns, the holdings summarization code can get stuck in an infinite
loop.  This solution prevents that, sparing the open-ils.serial
process and server resources, although it doesn't help the user out.

It will take further examination of the problem and reĆ«valution of how
we deal with problems reported by OpenILS::Utils::MFHD to help the
user avoid or resolve these situations.

Signed-off-by: Lebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Signed-off-by: Dan Wells <dbw2@calvin.edu>
Open-ILS/src/perlmods/lib/OpenILS/Utils/MFHD.pm
Open-ILS/src/perlmods/lib/OpenILS/Utils/MFHD/Caption.pm

index 309f9fe..2bf94d4 100644 (file)
@@ -405,6 +405,9 @@ sub get_compressed_holdings {
         } else {
             push(@comp_holdings, $curr_holding);
             while ($runner le $holding) {
+                # Here is where we used to get stuck in an infinite loop
+                # until the "Don't know how to deal with frequency" was
+                # elevated from a carp to a croak.
                 $runner->increment;
             }
             $curr_holding = $holding->clone;
index 297d0ab..bec2677 100644 (file)
@@ -475,7 +475,7 @@ sub next_chron {
         if (!defined($freq)) {
             carp "Undefined frequency in next_chron!";
         } elsif (!MFHD::Date::can_increment($freq)) {
-            carp "Don't know how to deal with frequency '$freq'!";
+            croak "Don't know how to deal with frequency '$freq'!";
         } else {
             # One of the standard defined issue frequencies
             @new = MFHD::Date::incr_date($freq, @cur);