Only call destroy on a client when it is not already being destroyed

Adds a check in the error listener on the client in the pool, to
prevent calling destroy on a client when it is already being
destroyed.
Without this check, if an error occurs during the ending of the
stream, such as a timeout, the client is never removed from
the pool and weird things happen.
This commit is contained in:
Jos Kuijpers 2014-07-30 14:17:04 +02:00
parent ac0d1c71c2
commit 1c17177369

View File

@ -30,7 +30,13 @@ var pools = {
//via the pg object and then removing errored client from the pool //via the pg object and then removing errored client from the pool
client.on('error', function(e) { client.on('error', function(e) {
pool.emit('error', e, client); pool.emit('error', e, client);
pool.destroy(client);
// If the client is already being destroyed, the error
// occurred during stream ending. Do not attempt to destroy
// the client again.
if (!client._destroying) {
pool.destroy(client);
}
}); });
// Remove connection from pool on disconnect // Remove connection from pool on disconnect