summary refs log tree commit diff stats
path: root/tests/parallel/tptr_to_ref.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2015-06-06 11:50:35 +0200
committerAraq <rumpf_a@web.de>2015-06-06 11:59:35 +0200
commita730a974ed7c585b2f3ade88e06eb308244fa83e (patch)
tree8464333d3ca496c5c980a41648f1555f0786b489 /tests/parallel/tptr_to_ref.nim
parent706080dcbdafd8c87f73edac3707a2e5605656b8 (diff)
downloadNim-a730a974ed7c585b2f3ade88e06eb308244fa83e.tar.gz
fixes #2854
Diffstat (limited to 'tests/parallel/tptr_to_ref.nim')
-rw-r--r--tests/parallel/tptr_to_ref.nim26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/parallel/tptr_to_ref.nim b/tests/parallel/tptr_to_ref.nim
new file mode 100644
index 000000000..66d618481
--- /dev/null
+++ b/tests/parallel/tptr_to_ref.nim
@@ -0,0 +1,26 @@
+# bug #2854
+
+import locks, threadpool, osproc
+
+const MAX_WORKERS = 10
+
+type
+  Killer = object
+    lock: Lock
+    bailed {.guard: lock.}: bool
+    processes {.guard: lock.}: array[0..MAX_WORKERS-1, foreign ptr Process]
+
+template hold(lock: Lock, body: stmt) =
+  lock.acquire
+  defer: lock.release
+  {.locks: [lock].}:
+    body
+
+proc initKiller*(): Killer =
+  initLock(result.lock)
+  result.lock.hold:
+    result.bailed = false
+    for i, _ in result.processes:
+      result.processes[i] = nil
+
+var killer = initKiller()