Skip to content

Commit bc0a741

Browse files
committed
CDRIVER-879 preserve scanner node on disconnect
1 parent 7f83475 commit bc0a741

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

src/mongoc/mongoc-cluster.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1079,7 +1079,7 @@ mongoc_cluster_disconnect_node (mongoc_cluster_t *cluster, uint32_t server_id)
10791079

10801080
/* might never actually have connected */
10811081
if (scanner_node && scanner_node->stream) {
1082-
mongoc_topology_scanner_node_destroy (scanner_node, true);
1082+
mongoc_topology_scanner_node_disconnect (scanner_node, true);
10831083
EXIT;
10841084
}
10851085
EXIT;

src/mongoc/mongoc-topology-scanner-private.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ mongoc_topology_scanner_add_and_scan (mongoc_topology_scanner_t *ts,
100100
void
101101
mongoc_topology_scanner_node_retire (mongoc_topology_scanner_node_t *node);
102102

103+
void
104+
mongoc_topology_scanner_node_disconnect (mongoc_topology_scanner_node_t *node,
105+
bool failed);
106+
103107
void
104108
mongoc_topology_scanner_node_destroy (mongoc_topology_scanner_node_t *node,
105109
bool failed);

src/mongoc/mongoc-topology-scanner.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,9 @@ mongoc_topology_scanner_node_retire (mongoc_topology_scanner_node_t *node)
149149
}
150150

151151
void
152-
mongoc_topology_scanner_node_destroy (mongoc_topology_scanner_node_t *node, bool failed)
152+
mongoc_topology_scanner_node_disconnect (mongoc_topology_scanner_node_t *node,
153+
bool failed)
153154
{
154-
DL_DELETE (node->ts->nodes, node);
155-
156155
if (node->dns_results) {
157156
freeaddrinfo (node->dns_results);
158157
node->dns_results = NULL;
@@ -161,6 +160,7 @@ mongoc_topology_scanner_node_destroy (mongoc_topology_scanner_node_t *node, bool
161160

162161
if (node->cmd) {
163162
mongoc_async_cmd_destroy (node->cmd);
163+
node->cmd = NULL;
164164
}
165165

166166
if (node->stream) {
@@ -169,8 +169,16 @@ mongoc_topology_scanner_node_destroy (mongoc_topology_scanner_node_t *node, bool
169169
} else {
170170
mongoc_stream_destroy (node->stream);
171171
}
172+
173+
node->stream = NULL;
172174
}
175+
}
173176

177+
void
178+
mongoc_topology_scanner_node_destroy (mongoc_topology_scanner_node_t *node, bool failed)
179+
{
180+
DL_DELETE (node->ts->nodes, node);
181+
mongoc_topology_scanner_node_disconnect (node, failed);
174182
bson_free (node);
175183
}
176184

0 commit comments

Comments
 (0)