git.asbjorn.biz
/
jquery.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e1d6edf
)
Fix memory leaks in IE caused by the custom abort function of $.ajax. Fixes bug ...
author
Colin Snover
<github.com@zetafleet.com>
Fri, 3 Dec 2010 06:12:52 +0000
(
00:12
-0600)
committer
Colin Snover
<github.com@zetafleet.com>
Fri, 3 Dec 2010 06:12:52 +0000
(
00:12
-0600)
src/ajax.js
patch
|
blob
|
history
diff --git
a/src/ajax.js
b/src/ajax.js
index
d10b931
..
6ea61eb
100644
(file)
--- a/
src/ajax.js
+++ b/
src/ajax.js
@@
-195,6
+195,17
@@
jQuery.extend({
},
ajax: function( origSettings ) {
},
ajax: function( origSettings ) {
+ // IE8 leaks a lot when we've set abort, and IE6-8 a little
+ // when we have set onreadystatechange. Bug #6242
+ // XXX IE7 still leaks when abort is called, no matter what
+ // we do
+ function cleanup() {
+ // IE6 will throw an error setting xhr.abort
+ try {
+ xhr.abort = xhr.onreadystatechange = jQuery.noop;
+ } catch(e) {}
+ }
+
var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
@@
-403,13
+414,12
@@
jQuery.extend({
requestDone = true;
if ( xhr ) {
requestDone = true;
if ( xhr ) {
- xhr.onreadystatechange = jQuery.noop;
+ cleanup();
}
// The transfer is complete and the data is available, or the request timed out
} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
requestDone = true;
}
// The transfer is complete and the data is available, or the request timed out
} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
requestDone = true;
- xhr.onreadystatechange = jQuery.noop;
status = isTimeout === "timeout" ?
"timeout" :
status = isTimeout === "timeout" ?
"timeout" :
@@
-451,10
+461,7
@@
jQuery.extend({
xhr.abort();
}
xhr.abort();
}
- // Stop memory leaks
- if ( s.async ) {
- xhr = null;
- }
+ cleanup();
}
};
}
};