diff options
author | Araq <rumpf_a@web.de> | 2014-04-20 22:42:51 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2014-04-20 22:42:51 +0200 |
commit | 36fc1d9d72b91a632b795b656a5ead52b472036f (patch) | |
tree | 8ef0e75ad5c492afac2e41c5ec1aafb86dbec97f /lib/system | |
parent | 407515993336f5e686f2c93c0fd05d189a5cad3c (diff) | |
download | Nim-36fc1d9d72b91a632b795b656a5ead52b472036f.tar.gz |
spawn has a chance of working on posix
Diffstat (limited to 'lib/system')
-rw-r--r-- | lib/system/sysspawn.nim | 18 |
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 |