Skip to content

Commit 2aaa0da

Browse files
committed
fix memory leak
For many reasons, node caches and leaves in memory (for pretty lengthy amount of time) HTTPRequest instances. Form-data doesn't unsubscribe from 'error' and 'response' event, leaving references to finish / callback. This is kind-of okay in most cases (HTTPRequest's do die after a while), it might be a problem with large payloads or other memory-hungry situations. This was only tested with NodeJS 8 - future versions might change how they are working with HTTPRequest's objects.
1 parent cd27e9a commit 2aaa0da

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

lib/form_data.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -462,8 +462,19 @@ FormData.prototype.submit = function(params, cb) {
462462

463463
this.pipe(request);
464464
if (cb) {
465-
request.on('error', cb);
466-
request.on('response', cb.bind(this, null));
465+
var onResponse;
466+
467+
var callback = function (error, responce) {
468+
request.removeListener('error', callback);
469+
request.removeListener('response', onResponse);
470+
471+
return cb.call(this, error, responce);
472+
};
473+
474+
onResponse = callback.bind(this, null);
475+
476+
request.on('error', callback);
477+
request.on('response', onResponse);
467478
}
468479
}.bind(this));
469480

0 commit comments

Comments
 (0)