Callbacks: Don't abort execution on .lock()

Fixes gh-1990
Closes gh-1991

(cherry picked from commit fc7477f492)
This commit is contained in:
Richard Gibson 2015-01-03 19:55:31 -05:00
parent 0d829f0e9a
commit 32bf9178ca
2 changed files with 13 additions and 5 deletions

View File

@ -190,7 +190,7 @@ jQuery.Callbacks = function( options ) {
lock: function() {
stack = undefined;
locked = true;
if ( !memory ) {
if ( !memory && !firing ) {
self.disable();
}
return this;

View File

@ -65,7 +65,7 @@ jQuery.each( tests, function( strFlags, resultString ) {
test( "jQuery.Callbacks( " + showFlags( flags ) + " ) - " + filterLabel, function() {
expect( 28 );
expect( 29 );
var cblist,
results = resultString.split( /\s+/ );
@ -94,7 +94,7 @@ jQuery.each( tests, function( strFlags, resultString ) {
strictEqual( cblist.disabled(), true, ".disabled() becomes true" );
strictEqual( cblist.locked(), true, "disabling locks" );
// #13517 - Emptying while firing
// Emptying while firing (#13517)
cblist = jQuery.Callbacks( flags );
cblist.add( cblist.empty );
cblist.add( function() {
@ -164,6 +164,16 @@ jQuery.each( tests, function( strFlags, resultString ) {
strictEqual( output, "X", "Lock early" );
strictEqual( cblist.locked(), true, "Locking reflected in accessor" );
// Locking while firing (gh-1990)
output = "X";
cblist = jQuery.Callbacks( flags );
cblist.add( cblist.lock );
cblist.add(function( str ) {
output += str;
});
cblist.fire( "A" );
strictEqual( output, "XA", "Locking doesn't abort execution (gh-1990)" );
// Ordering
output = "X";
cblist = jQuery.Callbacks( flags );
@ -331,8 +341,6 @@ test( "jQuery.Callbacks.has", function() {
strictEqual( cb.has(), true, "Check if unique list has callback function(s) attached" );
cb.lock();
strictEqual( cb.has(), false, "locked() list is empty and returns false" );
});
test( "jQuery.Callbacks() - adding a string doesn't cause a stack overflow", function() {