Skip to content

Commit 0cb0849

Browse files
Merge pull request #73 from Orvaxis/main
fix: avoid premature lock release, which may cause inconsistency with tcb status.
2 parents f7f96e1 + 7087b82 commit 0cb0849

1 file changed

Lines changed: 4 additions & 6 deletions

File tree

src/stream/tcp.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,10 @@ impl AsyncWrite for IpStackTcpStream {
270270
let nt = self.network_tuple();
271271
self.reset_timeout();
272272

273-
let (state, send_window, is_full) = {
274-
let tcb = self.tcb.lock().unwrap();
275-
let state = tcb.get_state();
276-
(state, tcb.get_send_window(), tcb.is_send_buffer_full())
277-
};
273+
let mut tcb = self.tcb.lock().unwrap();
274+
let state = tcb.get_state();
275+
let send_window = tcb.get_send_window();
276+
let is_full = tcb.is_send_buffer_full();
278277

279278
if state == TcpState::Closed {
280279
self.shutdown.lock().unwrap().ready();
@@ -289,7 +288,6 @@ impl AsyncWrite for IpStackTcpStream {
289288
return Poll::Pending;
290289
}
291290

292-
let mut tcb = self.tcb.lock().unwrap();
293291
let sender = &self.up_packet_sender;
294292
let payload_len = write_packet_to_device(sender, nt, &tcb, None, ACK | PSH, None, Some(buf.to_vec()))?;
295293
tcb.add_inflight_packet(buf[..payload_len].to_vec())?;

0 commit comments

Comments
 (0)