From d152ccc1e2ae07cff4685a9d1b8146297fffba38 Mon Sep 17 00:00:00 2001 From: Spencer Stirling Date: Tue, 9 Jun 2015 11:59:26 -0600 Subject: [PATCH] fixed threadpool and atomics to work with Visual Studio 32 and 64 bit --- lib/pure/concurrency/threadpool.nim | 2 +- lib/system/atomics.nim | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pure/concurrency/threadpool.nim b/lib/pure/concurrency/threadpool.nim index 749a2fa2d3..43a9dea110 100644 --- a/lib/pure/concurrency/threadpool.nim +++ b/lib/pure/concurrency/threadpool.nim @@ -290,7 +290,7 @@ proc slave(w: ptr Worker) {.thread.} = readyWorker = w signal(gSomeReady) await(w.taskArrived) - assert(not w.ready) + #assert(not w.ready) # doesn't work with Visual Studio w.f(w, w.data) if w.q.len != 0: w.cleanFlowVars if w.shutdown: diff --git a/lib/system/atomics.nim b/lib/system/atomics.nim index 0b16b63bf3..158fe91bc1 100644 --- a/lib/system/atomics.nim +++ b/lib/system/atomics.nim @@ -191,11 +191,11 @@ proc atomicDec*(memLoc: var int, x: int = 1): int = result = memLoc when defined(windows) and not someGcc: - proc interlockedCompareExchange(p: pointer; exchange, comparand: int32): int32 + proc interlockedCompareExchange(p: pointer; exchange, comparand: int): int {.importc: "InterlockedCompareExchange", header: "", cdecl.} proc cas*[T: bool|int|ptr](p: ptr T; oldValue, newValue: T): bool = - interlockedCompareExchange(p, newValue.int32, oldValue.int32) != 0 + interlockedCompareExchange(p, cast[int](newValue), cast[int](oldValue)) != 0 # XXX fix for 64 bit build else: # this is valid for GCC and Intel C++