Skip to content

Commit b8d2f1d

Browse files
committed
fix(teardown): properly destroy a topology when initial connect fails
Fixes NODE-1595
1 parent 64027e8 commit b8d2f1d

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

lib/mongo_client.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,9 @@ MongoClient.prototype.close = function(force, callback) {
201201
if (typeof force === 'function') (callback = force), (force = false);
202202

203203
// Close the topology connection
204-
this.topology.close(force);
205-
204+
if (this.topology) {
205+
this.topology.close(force);
206+
}
206207
// Emit close event
207208
this.emit('close', this);
208209

lib/operations/mongo_client_ops.js

+14-6
Original file line numberDiff line numberDiff line change
@@ -334,16 +334,21 @@ function createServer(mongoClient, options, callback) {
334334
// Propagate the events to the client
335335
const collectedEvents = collectEvents(mongoClient, servers[0]);
336336

337+
const server = servers[0];
338+
337339
// Connect to topology
338-
servers[0].connect(options, (err, topology) => {
339-
if (err) return callback(err);
340+
server.connect(options, (err, topology) => {
341+
if (err) {
342+
server.close(true);
343+
return callback(err);
344+
}
340345
// Clear out all the collected event listeners
341-
clearAllEvents(servers[0]);
346+
clearAllEvents(server);
342347

343348
// Relay all the events
344-
relayEvents(mongoClient, servers[0]);
349+
relayEvents(mongoClient, server);
345350
// Add listeners
346-
addListeners(mongoClient, servers[0]);
351+
addListeners(mongoClient, server);
347352
// Check if we are really speaking to a mongos
348353
const ismaster = topology.lastIsMaster();
349354

@@ -388,7 +393,10 @@ function createTopology(mongoClient, topologyType, options, callback) {
388393

389394
// Open the connection
390395
topology.connect(options, (err, topology) => {
391-
if (err) return callback(err);
396+
if (err) {
397+
topology.close(true);
398+
return callback(err);
399+
}
392400

393401
assignTopology(mongoClient, topology);
394402
callback(null, topology);

0 commit comments

Comments
 (0)