about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoshua Nelson <joshua@yottadb.com>2021-03-01 11:25:11 -0500
committerGitHub <noreply@github.com>2021-03-01 11:25:11 -0500
commit9a86a727c5acdf51a3cf062db552a2391da99276 (patch)
treeee2b3e874f9ac7f71f2d2dfa18bc93d191bfbeb1
parent687383113949d738f11d26f5cc820db251a7d2e4 (diff)
parent2616960be2493e1cdba95cc297bb2dbd520ad7c8 (diff)
downloadrust-9a86a727c5acdf51a3cf062db552a2391da99276.tar.gz
rust-9a86a727c5acdf51a3cf062db552a2391da99276.zip
Rollup merge of #82645 - rkjnsn:patch-3, r=Mark-Simulacrum
Clarify that SyncOnceCell::set blocks.

Reading the discussion of this feature, I gained the mistaken impression that neither `set` nor `get` blocked, and thus calling `get` immediately after `set` was not guaranteed to succeed. It turns out that `set` *does* block, guaranteeing that the cell contains a value once `set` returns. This change updates the documentation to state that explicitly.

Happy to adjust the wording as desired.
-rw-r--r--library/std/src/lazy.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/library/std/src/lazy.rs b/library/std/src/lazy.rs
index aec2a2aa639..974851a8bd6 100644
--- a/library/std/src/lazy.rs
+++ b/library/std/src/lazy.rs
@@ -177,7 +177,10 @@ impl<T> SyncOnceCell<T> {
 
     /// Sets the contents of this cell to `value`.
     ///
-    /// Returns `Ok(())` if the cell's value was updated.
+    /// May block if another thread is currently attempting to initialize the cell. The cell is
+    /// guaranteed to contain a value when set returns, though not necessarily the one provided.
+    ///
+    /// Returns `Ok(())` if the cell's value was set by this call.
     ///
     /// # Examples
     ///