summary refs log tree commit diff stats
path: root/lib/system
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2014-04-20 22:42:51 +0200
committerAraq <rumpf_a@web.de>2014-04-20 22:42:51 +0200
commit36fc1d9d72b91a632b795b656a5ead52b472036f (patch)
tree8ef0e75ad5c492afac2e41c5ec1aafb86dbec97f /lib/system
parent407515993336f5e686f2c93c0fd05d189a5cad3c (diff)
downloadNim-36fc1d9d72b91a632b795b656a5ead52b472036f.tar.gz
spawn has a chance of working on posix
Diffstat (limited to 'lib/system')
-rw-r--r--lib/system/sysspawn.nim18
1 files changed, 14 insertions, 4 deletions
diff --git a/lib/system/sysspawn.nim b/lib/system/sysspawn.nim
index 93a39fa79..dabf35a3e 100644
--- a/lib/system/sysspawn.nim
+++ b/lib/system/sysspawn.nim
@@ -46,20 +46,30 @@ type
     c: TSysCond
     when defined(posix):
       stupidLock: TSysLock
+      counter: int
 
 proc createCondVar(): CondVar =
   initSysCond(result.c)
   when defined(posix):
     initSysLock(result.stupidLock)
-    acquireSys(result.stupidLock)
+    #acquireSys(result.stupidLock)
 
 proc await(cv: var CondVar) =
   when defined(posix):
-    waitSysCond(cv.c, cv.stupidLock)
+    acquireSys(cv.stupidLock)
+    while cv.counter <= 0:
+      waitSysCond(cv.c, cv.stupidLock)
+    dec cv.counter
+    releaseSys(cv.stupidLock)
   else:
     waitSysCondWindows(cv.c)
 
-proc signal(cv: var CondVar) = signalSysCond(cv.c)
+proc signal(cv: var CondVar) =
+  when defined(posix):
+    acquireSys(cv.stupidLock)
+    inc cv.counter
+    releaseSys(cv.stupidLock)
+  signalSysCond(cv.c)
 
 type
   FastCondVar = object
@@ -70,7 +80,7 @@ proc createFastCondVar(): FastCondVar =
   initSysCond(result.slow.c)
   when defined(posix):
     initSysLock(result.slow.stupidLock)
-    acquireSys(result.slow.stupidLock)
+    #acquireSys(result.slow.stupidLock)
   result.event = false
   result.slowPath = false