diff options
Diffstat (limited to 'lib/system/syslocks.nim')
-rw-r--r-- | lib/system/syslocks.nim | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/system/syslocks.nim b/lib/system/syslocks.nim index 7a113b9d4..a91a5e7d4 100644 --- a/lib/system/syslocks.nim +++ b/lib/system/syslocks.nim @@ -7,7 +7,7 @@ # distribution, for details about the copyright. # -## Low level system locks and condition vars. +# Low level system locks and condition vars. when defined(Windows): type @@ -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, |