diff options
author | Som Snytt <som.snytt@gmail.com> | 2016-10-26 11:45:55 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2016-11-17 07:49:03 -0800 |
commit | fbcfba212fff76272c509c6781ea2a2897d84bff (patch) | |
tree | 2ff682f1233400ad9626294c1f6ca6e0d17666fb /src/library/scala/concurrent/SyncVar.scala | |
parent | 51e77408160fcef8b8c0669e1c62ec9a36f3b606 (diff) | |
download | scala-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.scala | 4 |
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 |