diff options
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/core/threads.nim | 7 | ||||
-rwxr-xr-x | lib/system/excpt.nim | 25 |
2 files changed, 16 insertions, 16 deletions
diff --git a/lib/core/threads.nim b/lib/core/threads.nim index 77253af20..eb0c69060 100755 --- a/lib/core/threads.nim +++ b/lib/core/threads.nim @@ -320,6 +320,7 @@ when isMainModule: else: assert false else: Aquire(L) # lock stdout + Aquire(M) echo i os.sleep(10) @@ -327,7 +328,7 @@ when isMainModule: echo "deadlocks prevented: ", deadlocksPrevented when nodeadlocks: Release(N) - Release(M) + Release(M) Release(L) InitLock(L) @@ -340,7 +341,7 @@ when isMainModule: for i in 0..high(thr): joinThread(thr[i]) - GC_disable() + #GC_disable() main() - GC_enable() + #GC_enable() diff --git a/lib/system/excpt.nim b/lib/system/excpt.nim index 12069ae37..bbe608fdc 100755 --- a/lib/system/excpt.nim +++ b/lib/system/excpt.nim @@ -67,21 +67,19 @@ when hasThreadSupport: else: {.passL: "-pthread".} {.passC: "-pthread".} - type - Tpthread_key {.importc: "pthread_key_t", - header: "<sys/types.h>".} = distinct int32 - TThreadVarSlot {.compilerproc.} = Tpthread_key + TThreadVarSlot {.importc: "pthread_key_t", pure, final, + header: "<sys/types.h>".} = object - proc pthread_getspecific(a1: Tpthread_key): pointer {. + proc pthread_getspecific(a1: TThreadVarSlot): pointer {. importc: "pthread_getspecific", header: "<pthread.h>".} - proc pthread_key_create(a1: ptr Tpthread_key, + proc pthread_key_create(a1: ptr TThreadVarSlot, destruct: proc (x: pointer) {.noconv.}): int32 {. importc: "pthread_key_create", header: "<pthread.h>".} - proc pthread_key_delete(a1: Tpthread_key): int32 {. + proc pthread_key_delete(a1: TThreadVarSlot): int32 {. importc: "pthread_key_delete", header: "<pthread.h>".} - proc pthread_setspecific(a1: Tpthread_key, a2: pointer): int32 {. + proc pthread_setspecific(a1: TThreadVarSlot, a2: pointer): int32 {. importc: "pthread_setspecific", header: "<pthread.h>".} proc specificDestroy(mem: pointer) {.noconv.} = @@ -112,11 +110,12 @@ when hasThreadSupport: data: float # compiler should add thread local variables here! PGlobals* = ptr TGlobals - # it's more efficient to not use a global variable for the thread storage - # slot, but to rely on the implementation to assign slot 0 for us... ;-) - var checkSlot = ThreadVarAlloc() - const globalsSlot = TThreadVarSlot(0) - assert checkSlot.int == globalsSlot.int + # XXX it'd be more efficient to not use a global variable for the + # thread storage slot, but to rely on the implementation to assign slot 0 + # for us... ;-) + var globalsSlot = ThreadVarAlloc() + #const globalsSlot = TThreadVarSlot(0) + #assert checkSlot.int == globalsSlot.int proc NewGlobals(): PGlobals = result = cast[PGlobals](alloc0(sizeof(TGlobals))) |