@@ -2031,6 +2031,7 @@ _mongoc_cluster_reconnect_replica_set (mongoc_cluster_t *cluster,
2031
2031
const mongoc_host_list_t * iter ;
2032
2032
mongoc_cluster_node_t node ;
2033
2033
mongoc_cluster_node_t * saved_nodes ;
2034
+ size_t saved_nodes_len ;
2034
2035
mongoc_host_list_t host ;
2035
2036
mongoc_stream_t * stream ;
2036
2037
mongoc_list_t * list ;
@@ -2047,6 +2048,7 @@ _mongoc_cluster_reconnect_replica_set (mongoc_cluster_t *cluster,
2047
2048
BSON_ASSERT (cluster -> mode == MONGOC_CLUSTER_REPLICA_SET );
2048
2049
2049
2050
saved_nodes = bson_malloc0 (cluster -> nodes_len * sizeof (* saved_nodes ));
2051
+ saved_nodes_len = cluster -> nodes_len ;
2050
2052
2051
2053
MONGOC_DEBUG ("Reconnecting to replica set." );
2052
2054
@@ -2142,10 +2144,11 @@ _mongoc_cluster_reconnect_replica_set (mongoc_cluster_t *cluster,
2142
2144
}
2143
2145
}
2144
2146
2145
- for (liter = list , i = 0 ;
2146
- liter && ( i < cluster -> nodes_len );
2147
- liter = liter -> next ) {
2147
+ for (liter = list , i = 0 ; liter ; liter = liter -> next , i ++ ) {}
2148
+ cluster -> nodes = bson_realloc ( cluster -> nodes , sizeof ( * cluster -> nodes ) * i );
2149
+ cluster -> nodes_len = i ;
2148
2150
2151
+ for (liter = list , i = 0 ; liter ; liter = liter -> next ) {
2149
2152
if (!_mongoc_host_list_from_string (& host , liter -> data )) {
2150
2153
MONGOC_WARNING ("Failed to parse host and port: \"%s\"" ,
2151
2154
(char * )liter -> data );
@@ -2154,7 +2157,7 @@ _mongoc_cluster_reconnect_replica_set (mongoc_cluster_t *cluster,
2154
2157
2155
2158
stream = NULL ;
2156
2159
2157
- for (j = 0 ; j < cluster -> nodes_len ; j ++ ) {
2160
+ for (j = 0 ; j < saved_nodes_len ; j ++ ) {
2158
2161
if (0 == strcmp (saved_nodes [j ].host .host_and_port ,
2159
2162
host .host_and_port )) {
2160
2163
stream = saved_nodes [j ].stream ;
@@ -2215,14 +2218,16 @@ _mongoc_cluster_reconnect_replica_set (mongoc_cluster_t *cluster,
2215
2218
i ++ ;
2216
2219
}
2217
2220
2221
+ cluster -> nodes_len = i ;
2222
+
2218
2223
_mongoc_list_foreach (list , (void (* )(void * ,void * ))bson_free , NULL );
2219
2224
_mongoc_list_destroy (list );
2220
2225
2221
2226
/*
2222
2227
* Cleanup all potential saved connections that were not used.
2223
2228
*/
2224
2229
2225
- for (j = 0 ; j < cluster -> nodes_len ; j ++ ) {
2230
+ for (j = 0 ; j < saved_nodes_len ; j ++ ) {
2226
2231
if (saved_nodes [j ].stream ) {
2227
2232
mongoc_stream_destroy (saved_nodes [j ].stream );
2228
2233
saved_nodes [j ].stream = NULL ;
0 commit comments