From 4fb38ced74d4ff125be619023632d6b3a572465a Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Wed, 4 May 2022 16:29:38 -0700 Subject: [PATCH] base: improve the WaitContext doc test Use the PollToken derive and the build_with() function to make the example more representative of actual uses. BUG=None TEST=cargo doc TEST=cargo test -p base --doc wait_context Change-Id: I1f154dfd6247786024dc94035ea63db11968e85a Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3630424 Reviewed-by: Dennis Kempin Reviewed-by: Noah Gold Tested-by: kokoro Commit-Queue: Daniel Verkamp --- base/src/wait_context.rs | 56 ++++++++++++++++++++++++++++------------ third_party/minijail | 2 +- 2 files changed, 41 insertions(+), 17 deletions(-) diff --git a/base/src/wait_context.rs b/base/src/wait_context.rs index 62df7b57c9..4ef0f58b46 100644 --- a/base/src/wait_context.rs +++ b/base/src/wait_context.rs @@ -44,24 +44,48 @@ pub enum EventType { /// # Example /// /// ``` -/// # use base::{ -/// Result, Event, WaitContext, -/// }; -/// # fn test() -> Result<()> { -/// let evt1 = Event::new()?; -/// let evt2 = Event::new()?; -/// evt2.write(1)?; +/// use base::{Event, PollToken, Result, WaitContext}; /// -/// let ctx: WaitContext = WaitContext::new()?; -/// ctx.add(&evt1, 1)?; -/// ctx.add(&evt2, 2)?; +/// #[derive(PollToken, Copy, Clone, Debug, PartialEq)] +/// enum ExampleToken { +/// SomeEvent(u32), +/// AnotherEvent, +/// } /// -/// let events = ctx.wait()?; -/// let tokens: Vec = events.iter().filter(|e| e.is_readable) -/// .map(|e| e.token).collect(); -/// assert_eq!(tokens, [2]); -/// # Ok(()) -/// # } +/// let evt1 = Event::new()?; +/// let evt2 = Event::new()?; +/// let another_evt = Event::new()?; +/// +/// let ctx: WaitContext = WaitContext::build_with(&[ +/// (&evt1, ExampleToken::SomeEvent(1)), +/// (&evt2, ExampleToken::SomeEvent(2)), +/// (&another_evt, ExampleToken::AnotherEvent), +/// ])?; +/// +/// // Trigger one of the `SomeEvent` events. +/// evt2.write(1)?; +/// +/// // Wait for an event to fire. `wait()` will return immediately in this example because `evt2` +/// // has already been triggered, but in normal use, `wait()` will block until at least one event +/// // is signaled by another thread or process. +/// let events = ctx.wait()?; +/// let tokens: Vec = events.iter().filter(|e| e.is_readable) +/// .map(|e| e.token).collect(); +/// assert_eq!(tokens, [ExampleToken::SomeEvent(2)]); +/// +/// // Reset evt2 so it doesn't trigger again in the next `wait()` call. +/// let _ = evt2.read()?; +/// +/// // Trigger a different event. +/// another_evt.write(1)?; +/// +/// let events = ctx.wait()?; +/// let tokens: Vec = events.iter().filter(|e| e.is_readable) +/// .map(|e| e.token).collect(); +/// assert_eq!(tokens, [ExampleToken::AnotherEvent]); +/// +/// let _ = another_evt.read()?; +/// # Ok::<(), base::Error>(()) /// ``` pub struct WaitContext(EventContext); diff --git a/third_party/minijail b/third_party/minijail index ff062d54f9..4170a270c9 160000 --- a/third_party/minijail +++ b/third_party/minijail @@ -1 +1 @@ -Subproject commit ff062d54f9a419e149f726b69aea8cd509158927 +Subproject commit 4170a270c9db983ffdbbd6c464494fc4432319b3