summaryrefslogtreecommitdiff
path: root/src/library/scala/concurrent/SyncVar.scala
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2016-10-26 11:45:55 -0700
committerSom Snytt <som.snytt@gmail.com>2016-11-17 07:49:03 -0800
commitfbcfba212fff76272c509c6781ea2a2897d84bff (patch)
tree2ff682f1233400ad9626294c1f6ca6e0d17666fb /src/library/scala/concurrent/SyncVar.scala
parent51e77408160fcef8b8c0669e1c62ec9a36f3b606 (diff)
downloadscala-fbcfba212fff76272c509c6781ea2a2897d84bff.tar.gz
scala-fbcfba212fff76272c509c6781ea2a2897d84bff.tar.bz2
scala-fbcfba212fff76272c509c6781ea2a2897d84bff.zip
SI-10007 sys.process thread sync
A previous change to replace `SyncVar.set` with `SyncVar.put` breaks things. This commit tweaks the thread synchronizing in `sys.process` to actually use `SyncVar` to sync and pass a var. Joining the thread about to exit is superfluous. A result is put exactly once, and consumers use non-destructive `get`. Note that as usual, avoid kicking off threads in a static context, since class loading cycles are somewhat dicier with 2.12 lambdas. In particular, REPL is a static context by default. SI-10007 Clarify deprecation message The message on `set` was self-fulfilling, as it didn't hint that `put` has different semantics. So explain why `put` helps avoid errors instead of creating them. SI-10007 Always set exit value Always put a value to exit code, defaulting to None. Also clean up around tuple change to unfortunately named Future.apply. Very hard to follow those types. Date command pollutes output, so tweak test.
Diffstat (limited to 'src/library/scala/concurrent/SyncVar.scala')
-rw-r--r--src/library/scala/concurrent/SyncVar.scala4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/library/scala/concurrent/SyncVar.scala b/src/library/scala/concurrent/SyncVar.scala
index 5fabf553bd..0e534a9b22 100644
--- a/src/library/scala/concurrent/SyncVar.scala
+++ b/src/library/scala/concurrent/SyncVar.scala
@@ -91,7 +91,7 @@ class SyncVar[A] {
// [Heather] the reason why: it doesn't take into consideration
// whether or not the SyncVar is already defined. So, set has been
// deprecated in order to eventually be able to make "setting" private
- @deprecated("use `put` instead, as `set` is potentially error-prone", "2.10.0")
+ @deprecated("use `put` to ensure a value cannot be overwritten without a corresponding `take`", "2.10.0")
// NOTE: Used by SBT 0.13.0-M2 and below
def set(x: A): Unit = setVal(x)
@@ -111,7 +111,7 @@ class SyncVar[A] {
// [Heather] the reason why: it doesn't take into consideration
// whether or not the SyncVar is already defined. So, unset has been
// deprecated in order to eventually be able to make "unsetting" private
- @deprecated("use `take` instead, as `unset` is potentially error-prone", "2.10.0")
+ @deprecated("use `take` to ensure a value is never discarded", "2.10.0")
// NOTE: Used by SBT 0.13.0-M2 and below
def unset(): Unit = synchronized {
isDefined = false