From: phasefx Date: Thu, 20 Aug 2009 08:01:42 +0000 (+0000) Subject: Fix a horrible regression when renewing multiple items at once in Items Out. X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=4c10c2e8389f99c69af4a5688551e8121de9f54d;p=evergreen%2Ftadl.git Fix a horrible regression when renewing multiple items at once in Items Out. Referencing loop variables in Javascript with closures is dangerous, so one strategy is to do something like this: funcs = []; for (var i = 0; i < my_array.length; i++ ) { /* Bad */ // funcs.push( function(){ do_something( my_array[i] ); } ); /* Better */ funcs.push( function(safe_value){ return function(){ do_something( safe_value ); } }( my_array[i] ) ); } In our case, our generated function accidentally referenced a value dependent on the loop variable instead of the corresponding argument of the function generator. So we had multiple async renewal calls that depending on the timing, could try to renew the same item. To further add insult to injury, this could potentially put the database in an inconsistent state wtih duplicate circulations. git-svn-id: svn://svn.open-ils.org/ILS/trunk@13889 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/xul/staff_client/server/patron/items.js b/Open-ILS/xul/staff_client/server/patron/items.js index ec4c2bbe1f..ce474f70c7 100644 --- a/Open-ILS/xul/staff_client/server/patron/items.js +++ b/Open-ILS/xul/staff_client/server/patron/items.js @@ -275,7 +275,7 @@ patron.items.prototype = { l.setAttribute('value', $("patronStrings").getFormattedString('staff.patron.items.items_renew.renewing',[bc])); x.appendChild(l); } - var renew = circ.util.renew_via_barcode( barcode, obj.patron_id, + var renew = circ.util.renew_via_barcode( bc, obj.patron_id, function(r) { try { if ( (typeof r[0].ilsevent != 'undefined' && r[0].ilsevent == 0) ) { @@ -297,7 +297,7 @@ patron.items.prototype = { } obj.refresh(circ_id); } catch(E) { - obj.error.standard_unexpected_error_alert($("patronStrings").getFormattedString('staff.patron.items.items_renew.err_in_renew_via_barcode',[barcode]), E); + obj.error.standard_unexpected_error_alert($("patronStrings").getFormattedString('staff.patron.items.items_renew.err_in_renew_via_barcode',[bc]), E); } } );