Protect socket states with PreemptDisabled

This commit is contained in:
Ruihan Li
2024-12-08 16:25:34 +08:00
committed by Tate, Hongliang Tian
parent 39a5e88baf
commit 1207161afe
3 changed files with 9 additions and 9 deletions

View File

@ -3,7 +3,7 @@
use core::sync::atomic::{AtomicBool, Ordering}; use core::sync::atomic::{AtomicBool, Ordering};
use aster_bigtcp::wire::IpEndpoint; use aster_bigtcp::wire::IpEndpoint;
use ostd::sync::WriteIrqDisabled; use ostd::sync::PreemptDisabled;
use takeable::Takeable; use takeable::Takeable;
use self::{bound::BoundDatagram, unbound::UnboundDatagram}; use self::{bound::BoundDatagram, unbound::UnboundDatagram};
@ -49,7 +49,7 @@ impl OptionSet {
pub struct DatagramSocket { pub struct DatagramSocket {
options: RwLock<OptionSet>, options: RwLock<OptionSet>,
inner: RwLock<Takeable<Inner>, WriteIrqDisabled>, inner: RwLock<Takeable<Inner>, PreemptDisabled>,
nonblocking: AtomicBool, nonblocking: AtomicBool,
pollee: Pollee, pollee: Pollee,
} }

View File

@ -3,7 +3,7 @@
use aster_bigtcp::{ use aster_bigtcp::{
errors::tcp::ListenError, iface::BindPortConfig, socket::UnboundTcpSocket, wire::IpEndpoint, errors::tcp::ListenError, iface::BindPortConfig, socket::UnboundTcpSocket, wire::IpEndpoint,
}; };
use ostd::sync::WriteIrqDisabled; use ostd::sync::PreemptDisabled;
use super::{connected::ConnectedStream, StreamObserver}; use super::{connected::ConnectedStream, StreamObserver};
use crate::{ use crate::{
@ -18,7 +18,7 @@ pub struct ListenStream {
/// A bound socket held to ensure the TCP port cannot be released /// A bound socket held to ensure the TCP port cannot be released
bound_socket: BoundTcpSocket, bound_socket: BoundTcpSocket,
/// Backlog sockets listening at the local endpoint /// Backlog sockets listening at the local endpoint
backlog_sockets: RwLock<Vec<BacklogSocket>, WriteIrqDisabled>, backlog_sockets: RwLock<Vec<BacklogSocket>, PreemptDisabled>,
} }
impl ListenStream { impl ListenStream {

View File

@ -8,7 +8,7 @@ use connecting::{ConnResult, ConnectingStream};
use init::InitStream; use init::InitStream;
use listen::ListenStream; use listen::ListenStream;
use options::{Congestion, MaxSegment, NoDelay, WindowClamp}; use options::{Congestion, MaxSegment, NoDelay, WindowClamp};
use ostd::sync::{PreemptDisabled, RwLockReadGuard, RwLockWriteGuard, WriteIrqDisabled}; use ostd::sync::{PreemptDisabled, RwLockReadGuard, RwLockWriteGuard};
use takeable::Takeable; use takeable::Takeable;
use util::TcpOptionSet; use util::TcpOptionSet;
@ -46,7 +46,7 @@ pub use self::util::CongestionControl;
pub struct StreamSocket { pub struct StreamSocket {
options: RwLock<OptionSet>, options: RwLock<OptionSet>,
state: RwLock<Takeable<State>, WriteIrqDisabled>, state: RwLock<Takeable<State>, PreemptDisabled>,
is_nonblocking: AtomicBool, is_nonblocking: AtomicBool,
pollee: Pollee, pollee: Pollee,
} }
@ -109,7 +109,7 @@ impl StreamSocket {
/// Ensures that the socket state is up to date and obtains a read lock on it. /// Ensures that the socket state is up to date and obtains a read lock on it.
/// ///
/// For a description of what "up-to-date" means, see [`Self::update_connecting`]. /// For a description of what "up-to-date" means, see [`Self::update_connecting`].
fn read_updated_state(&self) -> RwLockReadGuard<Takeable<State>, WriteIrqDisabled> { fn read_updated_state(&self) -> RwLockReadGuard<Takeable<State>, PreemptDisabled> {
loop { loop {
let state = self.state.read(); let state = self.state.read();
match state.as_ref() { match state.as_ref() {
@ -125,7 +125,7 @@ impl StreamSocket {
/// Ensures that the socket state is up to date and obtains a write lock on it. /// Ensures that the socket state is up to date and obtains a write lock on it.
/// ///
/// For a description of what "up-to-date" means, see [`Self::update_connecting`]. /// For a description of what "up-to-date" means, see [`Self::update_connecting`].
fn write_updated_state(&self) -> RwLockWriteGuard<Takeable<State>, WriteIrqDisabled> { fn write_updated_state(&self) -> RwLockWriteGuard<Takeable<State>, PreemptDisabled> {
self.update_connecting().1 self.update_connecting().1
} }
@ -142,7 +142,7 @@ impl StreamSocket {
&self, &self,
) -> ( ) -> (
RwLockWriteGuard<OptionSet, PreemptDisabled>, RwLockWriteGuard<OptionSet, PreemptDisabled>,
RwLockWriteGuard<Takeable<State>, WriteIrqDisabled>, RwLockWriteGuard<Takeable<State>, PreemptDisabled>,
) { ) {
// Hold the lock in advance to avoid race conditions. // Hold the lock in advance to avoid race conditions.
let mut options = self.options.write(); let mut options = self.options.write();