Skip to content
This repository was archived by the owner on Oct 18, 2021. It is now read-only.

Commit f24d662

Browse files
kalikyeah
authored andcommitted
fix topology description race condition (#161)
1 parent 8452b72 commit f24d662

File tree

1 file changed

+23
-21
lines changed

1 file changed

+23
-21
lines changed

src/topology/mod.rs

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -731,29 +731,31 @@ impl Topology {
731731
let start_ms = time.sec * 1000 + (time.nsec as i64) / 1000000;
732732

733733
loop {
734-
let description = try!(self.description.read());
735-
let result = if write {
736-
match description.acquire_write_stream() {
737-
Ok(stream) => Ok((stream, false, false)),
738-
Err(err) => Err(err),
739-
}
740-
} else {
741-
description.acquire_stream(read_preference.as_ref().unwrap())
742-
};
743-
744-
match result {
745-
Ok(stream) => return Ok(stream),
746-
Err(err) => {
747-
// Check duration of current server selection and return an error if overdue.
748-
let end_time = time::get_time();
749-
let end_ms = end_time.sec * 1000 + (end_time.nsec as i64) / 1000000;
750-
if end_ms - start_ms >= description.server_selection_timeout_ms {
751-
return Err(err)
734+
{
735+
let description = try!(self.description.read());
736+
let result = if write {
737+
match description.acquire_write_stream() {
738+
Ok(stream) => Ok((stream, false, false)),
739+
Err(err) => Err(err),
752740
}
753-
// Otherwise, sleep for a little while.
754-
thread::sleep(Duration::from_millis(500));
755-
},
741+
} else {
742+
description.acquire_stream(read_preference.as_ref().unwrap())
743+
};
744+
745+
match result {
746+
Ok(stream) => return Ok(stream),
747+
Err(err) => {
748+
// Check duration of current server selection and return an error if overdue.
749+
let end_time = time::get_time();
750+
let end_ms = end_time.sec * 1000 + (end_time.nsec as i64) / 1000000;
751+
if end_ms - start_ms >= description.server_selection_timeout_ms {
752+
return Err(err)
753+
}
754+
},
755+
}
756756
}
757+
// Otherwise, sleep for a little while.
758+
thread::sleep(Duration::from_millis(500));
757759
}
758760
}
759761

0 commit comments

Comments
 (0)