From 79c92603f505c388d370c5ef0dd8890e4e17e4e0 Mon Sep 17 00:00:00 2001 From: Araq Date: Tue, 2 Jun 2015 16:32:41 +0200 Subject: FlowVar's ^ for refs is safe and convenient to use --- lib/pure/concurrency/threadpool.nim | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'lib/pure/concurrency') diff --git a/lib/pure/concurrency/threadpool.nim b/lib/pure/concurrency/threadpool.nim index a431691ad..7080e16eb 100644 --- a/lib/pure/concurrency/threadpool.nim +++ b/lib/pure/concurrency/threadpool.nim @@ -221,11 +221,17 @@ proc awaitAndThen*[T](fv: FlowVar[T]; action: proc (x: T) {.closure.}) = action(fv.blob) finished(fv) -proc `^`*[T](fv: FlowVar[ref T]): foreign ptr T = +proc unsafeRead*[T](fv: FlowVar[ref T]): foreign ptr T = ## blocks until the value is available and then returns this value. await(fv) result = cast[foreign ptr T](fv.data) +proc `^`*[T](fv: FlowVar[ref T]): ref T = + ## blocks until the value is available and then returns this value. + await(fv) + let src = cast[ref T](fv.data) + deepCopy result, src + proc `^`*[T](fv: FlowVar[T]): T = ## blocks until the value is available and then returns this value. await(fv) -- cgit 1.4.1-2-gfad0