summary refs log tree commit diff stats
path: root/lib/system
diff options
context:
space:
mode:
authorAnatoly Galiulin <galiulin.anatoly@gmail.com>2016-02-17 17:05:20 +0600
committerAnatoly Galiulin <galiulin.anatoly@gmail.com>2016-02-17 17:05:20 +0600
commit0290bc224042ae8fb943dd55f76c046163f5062e (patch)
tree42c16beb4e8774e59f2af0f71fce2786bee95119 /lib/system
parent2e3c403d2b4c2f39f6cf692586feafc67d5663ef (diff)
downloadNim-0290bc224042ae8fb943dd55f76c046163f5062e.tar.gz
Added reentrant locks module to stdlib
Diffstat (limited to 'lib/system')
-rw-r--r--lib/system/syslocks.nim14
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/system/syslocks.nim b/lib/system/syslocks.nim
index 7a113b9d4..907a6c609 100644
--- a/lib/system/syslocks.nim
+++ b/lib/system/syslocks.nim
@@ -75,12 +75,24 @@ else:
   type
     SysLock {.importc: "pthread_mutex_t", pure, final,
                header: "<sys/types.h>".} = object
+    SysLockAttr {.importc: "pthread_mutexattr_t", pure, final
+               header: "<sys/types.h>".} = object
     SysCond {.importc: "pthread_cond_t", pure, final,
                header: "<sys/types.h>".} = object
+    SysLockType = distinct cint
+
+  proc SysLockType_Reentrant: SysLockType =
+    {.emit: "`result` = PTHREAD_MUTEX_RECURSIVE;".}
 
-  proc initSysLock(L: var SysLock, attr: pointer = nil) {.
+  proc initSysLock(L: var SysLock, attr: ptr SysLockAttr = nil) {.
     importc: "pthread_mutex_init", header: "<pthread.h>", noSideEffect.}
 
+  proc initSysLockAttr(a: var SysLockAttr) {.
+    importc: "pthread_mutexattr_init", header: "<pthread.h>", noSideEffect.}
+
+  proc setSysLockType(a: var SysLockAttr, t: SysLockType) {.
+    importc: "pthread_mutexattr_settype", header: "<pthread.h>", noSideEffect.}
+  
   proc acquireSys(L: var SysLock) {.noSideEffect,
     importc: "pthread_mutex_lock", header: "<pthread.h>".}
   proc tryAcquireSysAux(L: var SysLock): cint {.noSideEffect,