Skip to content

defaultHandler memory leak #3

@3y3

Description

@3y3

defaultHandler will cause memory leak if user doesn't listens on response event.

Possible fix:

var EventEmitter = require('events').EventEmitter;
function defaultHandler(request, options, cb) {
    var url = (typeof options === 'string' ? urlParse(options) : options).href;
    var start = new Date();

    setImmediate(console.log, chalk.gray('      → ' + url));

    var wasHandled = typeof cb === 'function';

    return request(options, cb)
        .once('response', function (response) {
            var request = response.req;
            if (!wasHandled && EventEmitter.listenerCount(request, 'response') === 0)
                response.resume();

            var status = response.statusCode;
            var s = status / 100 | 0;
            console.log('  ' + chalk[colorCodes[s]](status) + ' ← ' + url + ' ' + chalk.gray(time(start)));
        })
        .on('error', function (err) {
            console.log('  ' + chalk.red('xxx') + ' ← ' + url + ' ' + chalk.red(err.message));
        });
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions