Permalink
Browse files

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

Fixes gh-1990
Closes gh-1991

(cherry picked from commit fc7477f)
  • Loading branch information...
gibson042 committed Jan 4, 2015
1 parent 0d829f0 commit 32bf9178cace8c52a31c468a28adde9a4fdc4671
Showing with 13 additions and 5 deletions.
  1. +1 −1 src/callbacks.js
  2. +12 −4 test/unit/callbacks.js
View
@@ -190,7 +190,7 @@ jQuery.Callbacks = function( options ) {
lock: function() {
stack = undefined;
locked = true;
if ( !memory ) {
if ( !memory && !firing ) {
self.disable();
}
return this;
View
@@ -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() {

0 comments on commit 32bf917

Please sign in to comment.