From 4c10c2e8389f99c69af4a5688551e8121de9f54d Mon Sep 17 00:00:00 2001 From: phasefx Date: Thu, 20 Aug 2009 08:01:42 +0000 Subject: [PATCH] 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 --- Open-ILS/xul/staff_client/server/patron/items.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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); } } ); -- 2.11.0