Prevent repeat firing of render callback
If either the theme or mode are already cached, callback will be fired more than once. This is because `config.loadModule` appears to fire its callback synchronously. This means that in the event that the theme is already cached, `waiting` will first be incremented then decremented in the same pass, resulting in `done` being called a first time. Control will then flow to the `return` statement where waiting is still `0` and so the `callback` will fire a 2nd time. * Changes * Instead of changing the semantics of `config.loadModule`, I increment waiting at creation so that it will never fire until at least line #130 (`return` statement).
This commit is contained in:
parent
0e3abd3f41
commit
6db76f92cc
1 changed files with 2 additions and 2 deletions
|
|
@ -100,7 +100,7 @@ var highlight = function(el, opts, callback) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
highlight.render = function(input, mode, theme, lineStart, disableGutter, callback) {
|
highlight.render = function(input, mode, theme, lineStart, disableGutter, callback) {
|
||||||
var waiting = 0;
|
var waiting = 1;
|
||||||
var modeCache = EditSession.prototype.$modes;
|
var modeCache = EditSession.prototype.$modes;
|
||||||
|
|
||||||
// if either the theme or the mode were specified as objects
|
// if either the theme or the mode were specified as objects
|
||||||
|
|
@ -127,7 +127,7 @@ highlight.render = function(input, mode, theme, lineStart, disableGutter, callba
|
||||||
var result = highlight.renderSync(input, mode, theme, lineStart, disableGutter);
|
var result = highlight.renderSync(input, mode, theme, lineStart, disableGutter);
|
||||||
return callback ? callback(result) : result;
|
return callback ? callback(result) : result;
|
||||||
}
|
}
|
||||||
return waiting || done();
|
return --waiting || done();
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue