summary refs log tree commit diff stats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rwxr-xr-xlib/core/threads.nim7
-rwxr-xr-xlib/system/excpt.nim25
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)))