diff --git a/Cargo.lock b/Cargo.lock index 0d9cb0a9..86b84e9a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -92,6 +92,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + [[package]] name = "anstream" version = "0.3.2" @@ -307,6 +313,12 @@ dependencies = [ "vec_map", ] +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + [[package]] name = "cc" version = "1.0.73" @@ -334,6 +346,33 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +[[package]] +name = "ciborium" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" + +[[package]] +name = "ciborium-ll" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +dependencies = [ + "ciborium-io", + "half 1.8.2", +] + [[package]] name = "clap" version = "4.3.4" @@ -490,6 +529,7 @@ version = "0.0.1" dependencies = [ "bytes 0.3.0", "cfg-if 0.1.10", + "criterion", "env_logger 0.4.3", "fuchsia-zircon", "fuchsia-zircon-sys", @@ -566,6 +606,42 @@ dependencies = [ "cfg-if 1.0.0", ] +[[package]] +name = "criterion" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "criterion-plot", + "is-terminal", + "itertools", + "num-traits", + "once_cell", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools", +] + [[package]] name = "crossbeam-channel" version = "0.5.6" @@ -766,7 +842,7 @@ checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4" dependencies = [ "bit_field", "flume", - "half", + "half 2.2.1", "lebe", "miniz_oxide 0.6.2", "rayon-core", @@ -1069,6 +1145,12 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + [[package]] name = "half" version = "2.2.1" @@ -1228,6 +1310,21 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + [[package]] name = "jni-sys" version = "0.3.0" @@ -1754,6 +1851,12 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + [[package]] name = "orbclient" version = "0.3.43" @@ -1874,6 +1977,34 @@ version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +[[package]] +name = "plotters" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609" + +[[package]] +name = "plotters-svg" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab" +dependencies = [ + "plotters-backend", +] + [[package]] name = "png" version = "0.17.8" @@ -2169,6 +2300,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + [[package]] name = "same-file" version = "1.0.6" @@ -2228,6 +2365,17 @@ dependencies = [ "syn 2.0.18", ] +[[package]] +name = "serde_json" +version = "1.0.97" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf3bf93142acad5821c99197022e170842cdbc1c30482b98750c688c640842a" +dependencies = [ + "itoa", + "ryu", + "serde", +] + [[package]] name = "serde_spanned" version = "0.6.1" @@ -2483,6 +2631,16 @@ dependencies = [ "weezl", ] +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "tokio" version = "1.26.0" diff --git a/corcovado/Cargo.toml b/corcovado/Cargo.toml index 49f9a430..82f9c3ed 100644 --- a/corcovado/Cargo.toml +++ b/corcovado/Cargo.toml @@ -1,17 +1,16 @@ [package] - -name = "corcovado" -version = "0.0.1" -license = "MIT" -authors = ["Carl Lerche ", "Raphael Amorim ", "Raphael Amorim Option { self.inner.get(idx) } - #[doc(hidden)] - #[deprecated( - since = "0.6.10", - note = "Index access removed in favor of iterator only API." - )] pub fn len(&self) -> usize { self.inner.len() } @@ -1657,9 +1647,6 @@ impl Registration { (registration, set_readiness) } - #[deprecated(since = "0.6.5", note = "use `new2` instead")] - #[cfg(feature = "with-deprecated")] - #[doc(hidden)] pub fn new( poll: &Poll, token: Token, @@ -1703,9 +1690,6 @@ impl Registration { (registration, set_readiness) } - #[deprecated(since = "0.6.5", note = "use `Evented` impl")] - #[cfg(feature = "with-deprecated")] - #[doc(hidden)] pub fn update( &self, poll: &Poll, @@ -1716,9 +1700,6 @@ impl Registration { self.inner.update(poll, token, interest, opts) } - #[deprecated(since = "0.6.5", note = "use `Poll::deregister` instead")] - #[cfg(feature = "with-deprecated")] - #[doc(hidden)] pub fn deregister(&self, poll: &Poll) -> io::Result<()> { self.inner .update(poll, Token(0), Ready::empty(), PollOpt::empty()) diff --git a/teletypewriter/src/unix/socket.rs b/corcovado/src/socket.rs similarity index 97% rename from teletypewriter/src/unix/socket.rs rename to corcovado/src/socket.rs index 3c07da2f..145a4376 100644 --- a/teletypewriter/src/unix/socket.rs +++ b/corcovado/src/socket.rs @@ -135,7 +135,7 @@ pub unsafe fn sockaddr_un( let bytes = path.as_os_str().as_bytes(); - match (bytes.get(0), bytes.len().cmp(&addr.sun_path.len())) { + match (bytes.first(), bytes.len().cmp(&addr.sun_path.len())) { // Abstract paths don't need a null terminator (Some(&0), Ordering::Greater) => { return Err(io::Error::new( @@ -158,7 +158,7 @@ pub unsafe fn sockaddr_un( // struct let mut len = sun_path_offset() + bytes.len(); - match bytes.get(0) { + match bytes.first() { Some(&0) | None => {} Some(_) => len += 1, } @@ -168,6 +168,8 @@ pub unsafe fn sockaddr_un( fn sun_path_offset() -> usize { unsafe { // Work with an actual instance of the type since using a null pointer is UB + #[allow(invalid_value)] + #[allow(deprecated)] let addr: libc::sockaddr_un = mem::uninitialized(); let base = &addr as *const _ as usize; let path = &addr.sun_path as *const _ as usize; diff --git a/teletypewriter/src/unix/stream.rs b/corcovado/src/stream.rs similarity index 98% rename from teletypewriter/src/unix/stream.rs rename to corcovado/src/stream.rs index 28a46bfc..b3d359d9 100644 --- a/teletypewriter/src/unix/stream.rs +++ b/corcovado/src/stream.rs @@ -6,15 +6,15 @@ use std::os::unix::net; use std::os::unix::prelude::*; use std::path::Path; -use corcovado::event::Evented; -use corcovado::unix::EventedFd; -use corcovado::{Poll, PollOpt, Ready, Token}; +use crate::event::Evented; +use crate::unix::EventedFd; +use crate::{Poll, PollOpt, Ready, Token}; use iovec::{ unix::{as_os_slice, as_os_slice_mut}, IoVec, }; -use crate::unix::socket::{sockaddr_un, Socket}; +use crate::socket::{sockaddr_un, Socket}; fn cvt(i: libc::c_int) -> io::Result { if i == -1 { diff --git a/corcovado/test/mod.rs b/corcovado/test/mod.rs index d3c3ebbf..8f28e855 100644 --- a/corcovado/test/mod.rs +++ b/corcovado/test/mod.rs @@ -168,13 +168,10 @@ pub fn expect_events( poll.poll(event_buffer, Some(Duration::from_millis(MS))) .unwrap(); for event in event_buffer.iter() { - let pos_opt = match expected.iter().position(|exp_event| { + let pos_opt = expected.iter().position(|exp_event| { (event.token() == exp_event.token()) && event.readiness().contains(exp_event.readiness()) - }) { - Some(x) => Some(x), - None => None, - }; + }); if let Some(pos) = pos_opt { expected.remove(pos); } diff --git a/corcovado/test/test_custom_evented.rs b/corcovado/test/test_custom_evented.rs index 98c7514c..f365c293 100644 --- a/corcovado/test/test_custom_evented.rs +++ b/corcovado/test/test_custom_evented.rs @@ -115,19 +115,18 @@ mod stress { thread::spawn(move || { for _ in 0..NUM_ITERS { - for i in 0..NUM_REGISTRATIONS { - set_readiness[i].set_readiness(Ready::readable()).unwrap(); - set_readiness[i].set_readiness(Ready::empty()).unwrap(); - set_readiness[i].set_readiness(Ready::writable()).unwrap(); - set_readiness[i] - .set_readiness(Ready::readable() | Ready::writable()) + for i in set_readiness.iter().take(NUM_REGISTRATIONS) { + i.set_readiness(Ready::readable()).unwrap(); + i.set_readiness(Ready::empty()).unwrap(); + i.set_readiness(Ready::writable()).unwrap(); + i.set_readiness(Ready::readable() | Ready::writable()) .unwrap(); - set_readiness[i].set_readiness(Ready::empty()).unwrap(); + i.set_readiness(Ready::empty()).unwrap(); } } - for i in 0..NUM_REGISTRATIONS { - set_readiness[i].set_readiness(Ready::readable()).unwrap(); + for i in set_readiness.iter().take(NUM_REGISTRATIONS) { + i.set_readiness(Ready::readable()).unwrap(); } remaining.fetch_sub(1, Release); @@ -136,7 +135,7 @@ mod stress { while remaining.load(Acquire) > 0 { // Set interest - for (i, &(ref r, _)) in registrations.iter().enumerate() { + for (i, (r, _)) in registrations.iter().enumerate() { r.reregister(&poll, Token(i), Ready::writable(), PollOpt::edge()) .unwrap(); } @@ -150,7 +149,7 @@ mod stress { // Update registration // Set interest - for (i, &(ref r, _)) in registrations.iter().enumerate() { + for (i, (r, _)) in registrations.iter().enumerate() { r.reregister(&poll, Token(i), Ready::readable(), PollOpt::edge()) .unwrap(); } @@ -262,6 +261,7 @@ mod stress { loop { if num < PER_ENTRY { + #[allow(deprecated)] let actual = e.num.compare_and_swap(num, num + 1, Relaxed); diff --git a/teletypewriter/src/unix/mod.rs b/teletypewriter/src/unix/mod.rs index 7f160bb1..52fa4f67 100644 --- a/teletypewriter/src/unix/mod.rs +++ b/teletypewriter/src/unix/mod.rs @@ -1,8 +1,6 @@ #![cfg(unix)] mod signals; -mod socket; -mod stream; extern crate libc; diff --git a/teletypewriter/src/unix/signals.rs b/teletypewriter/src/unix/signals.rs index 2cfa28a2..ee89bd0b 100644 --- a/teletypewriter/src/unix/signals.rs +++ b/teletypewriter/src/unix/signals.rs @@ -1,5 +1,5 @@ -use crate::unix::stream; use corcovado::event::Evented; +use corcovado::stream; use corcovado::{Poll, PollOpt, Ready, Token}; use std::io::Error; @@ -54,6 +54,7 @@ macro_rules! implement_signals_with_pipe { /// /// The same restrictions (panics, errors) apply as with /// [`Handle::add_signal`][backend::Handle::add_signal]. + #[allow(unused)] pub fn add_signal(&self, signal: c_int) -> Result<(), Error> { self.0.handle().add_signal(signal) }