Skip to content

Commit 0323e98

Browse files
locking is hard
1 parent 7165a18 commit 0323e98

File tree

1 file changed

+4
-7
lines changed

1 file changed

+4
-7
lines changed

net-tools/netwatch/src/udp.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,18 +79,17 @@ impl UdpSocket {
7979
/// Rebind the underlying socket.
8080
pub fn rebind(&self) -> Result<()> {
8181
// Remove old socket
82+
let mut guard = self.socket.write().unwrap();
8283
{
83-
let mut guard = self.socket.write().unwrap();
8484
let socket = guard.take().expect("not yet dropped");
85-
8685
drop(socket);
8786
}
8887

8988
// Prepare new socket
9089
let new_socket = inner_bind(self.addr)?;
9190

9291
// Insert new socket
93-
self.socket.write().unwrap().replace(new_socket);
92+
guard.replace(new_socket);
9493

9594
// Clear errors
9695
self.is_broken
@@ -102,10 +101,8 @@ impl UdpSocket {
102101
fn bind_raw(addr: impl Into<SocketAddr>) -> Result<Self> {
103102
let mut addr = addr.into();
104103
let socket = inner_bind(addr)?;
105-
if addr.port() == 0 {
106-
// update to use selected port
107-
addr.set_port(socket.local_addr()?.port());
108-
}
104+
// update to use selected port
105+
addr.set_port(socket.local_addr()?.port());
109106

110107
Ok(UdpSocket {
111108
socket: Arc::new(RwLock::new(Some(socket))),

0 commit comments

Comments
 (0)