diff --git a/.github/actions/rust/action.yml b/.github/actions/rust/action.yml index 7640e986a7..54fe0e45a1 100644 --- a/.github/actions/rust/action.yml +++ b/.github/actions/rust/action.yml @@ -24,8 +24,7 @@ runs: - name: Install Rust uses: dtolnay/rust-toolchain@21dc36fb71dd22e3317045c0c31a3f4249868b17 # master with: - # TODO: Unpin once https://github.com/rust-lang/rust/issues/135235 is fixed. - toolchain: ${{ inputs.version == 'nightly' && 'nightly-2025-01-07' || inputs.version }} + toolchain: ${{ inputs.version }} components: ${{ inputs.components }} targets: ${{ inputs.targets }} diff --git a/Cargo.toml b/Cargo.toml index cbe2abe707..674a72126a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,6 +60,7 @@ cargo = { level = "warn", priority = -1 } nursery = { level = "warn", priority = -1 } pedantic = { level = "warn", priority = -1 } cfg_not_test = "warn" +clone_on_ref_ptr = "warn" if_then_some_else_none = "warn" get_unwrap = "warn" multiple_inherent_impl = "warn" diff --git a/neqo-http3/src/connection.rs b/neqo-http3/src/connection.rs index d3dd12d8fe..87efda041a 100644 --- a/neqo-http3/src/connection.rs +++ b/neqo-http3/src/connection.rs @@ -902,7 +902,7 @@ impl Http3Connection { MessageType::Request, stream_type, stream_id, - self.qpack_encoder.clone(), + Rc::clone(&self.qpack_encoder), send_events, ); @@ -1133,8 +1133,8 @@ impl Http3Connection { ))); self.add_streams( id, - Box::new(extended_conn.clone()), - Box::new(extended_conn.clone()), + Box::new(Rc::clone(&extended_conn)), + Box::new(Rc::clone(&extended_conn)), ); let final_headers = Self::create_fetch_headers(&RequestDescription { @@ -1217,7 +1217,7 @@ impl Http3Connection { ))); self.add_streams( stream_id, - Box::new(extended_conn.clone()), + Box::new(Rc::clone(&extended_conn)), Box::new(extended_conn), ); self.streams_with_pending_data.insert(stream_id); @@ -1368,7 +1368,7 @@ impl Http3Connection { stream_id, session_id, send_events, - webtransport_session.clone(), + Rc::clone(&webtransport_session), local, )), Box::new(WebTransportRecvStream::new( diff --git a/neqo-http3/src/connection_server.rs b/neqo-http3/src/connection_server.rs index c4e9b353c0..80e318f584 100644 --- a/neqo-http3/src/connection_server.rs +++ b/neqo-http3/src/connection_server.rs @@ -325,7 +325,7 @@ impl Http3ServerHandler { MessageType::Response, Http3StreamType::Http, stream_id, - self.base_handler.qpack_encoder.clone(), + Rc::clone(&self.base_handler.qpack_encoder), Box::new(self.events.clone()), )), Box::new(RecvMessage::new( diff --git a/neqo-http3/src/features/extended_connect/webtransport_session.rs b/neqo-http3/src/features/extended_connect/webtransport_session.rs index ea8a87659c..88b948e0d6 100644 --- a/neqo-http3/src/features/extended_connect/webtransport_session.rs +++ b/neqo-http3/src/features/extended_connect/webtransport_session.rs @@ -73,7 +73,7 @@ impl WebTransportSession { first_frame_type: None, }, qpack_decoder, - Box::new(stream_event_listener.clone()), + Box::new(Rc::clone(&stream_event_listener)), None, PriorityHandler::new(false, Priority::default()), )), @@ -82,7 +82,7 @@ impl WebTransportSession { Http3StreamType::ExtendedConnect, session_id, qpack_encoder, - Box::new(stream_event_listener.clone()), + Box::new(Rc::clone(&stream_event_listener)), )), stream_event_listener, session_id, @@ -111,11 +111,11 @@ impl WebTransportSession { control_stream_recv .http_stream() .unwrap() - .set_new_listener(Box::new(stream_event_listener.clone())); + .set_new_listener(Box::new(Rc::clone(&stream_event_listener))); control_stream_send .http_stream() .unwrap() - .set_new_listener(Box::new(stream_event_listener.clone())); + .set_new_listener(Box::new(Rc::clone(&stream_event_listener))); Self { control_stream_recv, control_stream_send, @@ -451,7 +451,7 @@ impl RecvStream for Rc> { } fn webtransport(&self) -> Option>> { - Some(self.clone()) + Some(Self::clone(self)) } } diff --git a/neqo-http3/src/server.rs b/neqo-http3/src/server.rs index 8f431f8b5f..c5914e2f60 100644 --- a/neqo-http3/src/server.rs +++ b/neqo-http3/src/server.rs @@ -152,6 +152,7 @@ impl Http3Server { } } + #[allow(clippy::too_many_lines)] fn process_events(&mut self, conn: &ConnectionRef, now: Instant) { let mut remove = false; let http3_parameters = &self.http3_parameters; @@ -172,7 +173,11 @@ impl Http3Server { headers, fin, } => self.events.headers( - Http3OrWebTransportStream::new(conn.clone(), handler.clone(), stream_info), + Http3OrWebTransportStream::new( + conn.clone(), + Rc::clone(handler), + stream_info, + ), headers, fin, ), @@ -188,15 +193,19 @@ impl Http3Server { } Http3ServerConnEvent::DataWritable { stream_info } => self .events - .data_writable(conn.clone(), handler.clone(), stream_info), + .data_writable(conn.clone(), Rc::clone(handler), stream_info), Http3ServerConnEvent::StreamReset { stream_info, error } => { - self.events - .stream_reset(conn.clone(), handler.clone(), stream_info, error); + self.events.stream_reset( + conn.clone(), + Rc::clone(handler), + stream_info, + error, + ); } Http3ServerConnEvent::StreamStopSending { stream_info, error } => { self.events.stream_stop_sending( conn.clone(), - handler.clone(), + Rc::clone(handler), stream_info, error, ); @@ -216,7 +225,7 @@ impl Http3Server { } Http3ServerConnEvent::ExtendedConnect { stream_id, headers } => { self.events.webtransport_new_session( - WebTransportRequest::new(conn.clone(), handler.clone(), stream_id), + WebTransportRequest::new(conn.clone(), Rc::clone(handler), stream_id), headers, ); } @@ -226,7 +235,7 @@ impl Http3Server { headers, .. } => self.events.webtransport_session_closed( - WebTransportRequest::new(conn.clone(), handler.clone(), stream_id), + WebTransportRequest::new(conn.clone(), Rc::clone(handler), stream_id), reason, headers, ), @@ -234,14 +243,14 @@ impl Http3Server { .events .webtransport_new_stream(Http3OrWebTransportStream::new( conn.clone(), - handler.clone(), + Rc::clone(handler), stream_info, )), Http3ServerConnEvent::ExtendedConnectDatagram { session_id, datagram, } => self.events.webtransport_datagram( - WebTransportRequest::new(conn.clone(), handler.clone(), session_id), + WebTransportRequest::new(conn.clone(), Rc::clone(handler), session_id), datagram, ), } @@ -294,7 +303,7 @@ fn prepare_data( data.resize(amount, 0); } - events.data(conn.clone(), handler.clone(), stream_info, data, fin); + events.data(conn.clone(), Rc::clone(handler), stream_info, data, fin); } if amount < MAX_EVENT_DATA_SIZE || fin { break; diff --git a/neqo-http3/src/server_events.rs b/neqo-http3/src/server_events.rs index 3f174ba0a0..87f30f85fc 100644 --- a/neqo-http3/src/server_events.rs +++ b/neqo-http3/src/server_events.rs @@ -335,7 +335,7 @@ impl WebTransportRequest { Ok(Http3OrWebTransportStream::new( self.stream_handler.conn.clone(), - self.stream_handler.handler.clone(), + Rc::clone(&self.stream_handler.handler), Http3StreamInfo::new(id, Http3StreamType::WebTransport(session_id)), )) } diff --git a/neqo-transport/src/connection/mod.rs b/neqo-transport/src/connection/mod.rs index 5b59369d6a..666db13381 100644 --- a/neqo-transport/src/connection/mod.rs +++ b/neqo-transport/src/connection/mod.rs @@ -403,7 +403,7 @@ impl Connection { state: State::Init, paths: Paths::default(), cid_manager, - tps: tphandler.clone(), + tps: Rc::clone(&tphandler), zero_rtt_state: ZeroRttState::Init, address_validation: AddressValidationInfo::None, local_initial_source_cid, @@ -441,7 +441,7 @@ impl Connection { zero_rtt_checker: impl ZeroRttChecker + 'static, ) -> Res<()> { self.crypto - .server_enable_0rtt(self.tps.clone(), anti_replay, zero_rtt_checker) + .server_enable_0rtt(Rc::clone(&self.tps), anti_replay, zero_rtt_checker) } /// # Errors diff --git a/neqo-udp/src/lib.rs b/neqo-udp/src/lib.rs index ef57a996f8..a68367aa8f 100644 --- a/neqo-udp/src/lib.rs +++ b/neqo-udp/src/lib.rs @@ -233,7 +233,7 @@ mod tests { // platforms. Use `std` socket instead. See also // . let sender = std::net::UdpSocket::bind("127.0.0.1:0")?; - let receiver = Socket::new(std::net::UdpSocket::bind("127.0.0.1:0")?)?; + let receiver = socket()?; let receiver_addr: SocketAddr = "127.0.0.1:0".parse().unwrap(); sender.send_to(&[], receiver.inner.local_addr()?)?; diff --git a/test-fixture/src/sim/mod.rs b/test-fixture/src/sim/mod.rs index 5969d0b282..2d2c6e2e0d 100644 --- a/test-fixture/src/sim/mod.rs +++ b/test-fixture/src/sim/mod.rs @@ -249,7 +249,7 @@ impl Simulator { qinfo!("{}: seed {}", self.name, self.rng.borrow().seed_str()); for n in &mut self.nodes { - n.init(self.rng.clone(), start); + n.init(Rc::clone(&self.rng), start); } let setup_start = Instant::now();