From 36fc1d9d72b91a632b795b656a5ead52b472036f Mon Sep 17 00:00:00 2001 From: Araq Date: Sun, 20 Apr 2014 22:42:51 +0200 Subject: [PATCH] spawn has a chance of working on posix --- lib/system/sysspawn.nim | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/system/sysspawn.nim b/lib/system/sysspawn.nim index 93a39fa79d..dabf35a3e5 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