0 | module System.Posix.Pthreads
2 | import System.Posix.Pthreads.Prim as P
3 | import public Control.Monad.Resource
4 | import public Data.C.Ptr
5 | import public System.Posix.Errno
6 | import public System.Posix.Pthreads.Struct
7 | import public System.Posix.Pthreads.Types
8 | import System.Posix.Signal
9 | import System.Posix.Time
14 | ELift1 World f => Resource f MutexT where
15 | cleanup m = lift1 {s = World} $
ffi (P.destroyMutex m)
18 | ELift1 World f => Resource f CondT where
19 | cleanup m = lift1 {s = World} $
ffi (P.destroyCond m)
23 | pthreadSelf : HasIO io => io PthreadT
24 | pthreadSelf = primIO P.pthreadSelf
28 | pthreadJoin : Has Errno es => EIO1 f => PthreadT -> f es ()
29 | pthreadJoin p = elift1 (P.pthreadJoin p)
35 | mkmutex : Has Errno es => EIO1 f => MutexType -> f es MutexT
36 | mkmutex t = elift1 (P.mkmutex t)
40 | destroyMutex : HasIO io => MutexT -> io ()
41 | destroyMutex m = primIO (P.destroyMutex m)
46 | lockMutex : Has Errno es => EIO1 f => MutexT -> f es ()
47 | lockMutex p = elift1 (P.lockMutex p)
52 | timedlockMutex : Has Errno es => EIO1 f => MutexT -> Clock Duration -> f es Bool
53 | timedlockMutex p cl = elift1 (P.timedlockMutex p cl)
58 | trylockMutex : Has Errno es => EIO1 f => MutexT -> f es Bool
59 | trylockMutex p = elift1 (P.trylockMutex p)
66 | unlockMutex : Has Errno es => EIO1 f => MutexT -> f es ()
67 | unlockMutex p = elift1 (P.unlockMutex p)
77 | mkcond : Has Errno es => EIO1 f => f es CondT
78 | mkcond = elift1 P.mkcond
82 | destroyCond : HasIO io => CondT -> io ()
83 | destroyCond = primIO . destroyCond
91 | condSignal : Has Errno es => EIO1 f => CondT -> f es ()
92 | condSignal c = elift1 (condSignal c)
98 | condBroadcast : Has Errno es => EIO1 f => CondT -> f es ()
99 | condBroadcast c = elift1 (condBroadcast c)
108 | condWait : Has Errno es => EIO1 f => CondT -> MutexT -> f es ()
109 | condWait c m = elift1 (condWait c m)
113 | condTimedwait : Has Errno es => EIO1 f => CondT -> MutexT -> Clock UTC -> f es Bool
114 | condTimedwait c m d = elift1 (condTimedwait c m d)
122 | pthreadCancel : Has Errno es => EIO1 f => PthreadT -> f es ()
123 | pthreadCancel t = elift1 (P.pthreadCancel t)
128 | pthreadTestCancel : HasIO io => io ()
129 | pthreadTestCancel = primIO P.pthreadTestCancel
133 | setCancelType : HasIO io => CancelType -> io CancelType
134 | setCancelType = primIO . P.setCancelType
138 | setCancelState : HasIO io => CancelState -> io CancelState
139 | setCancelState = primIO . P.setCancelState
148 | pthreadSigmask : Has Errno es => EIO1 f => How -> List Signal -> f es ()
149 | pthreadSigmask h ss = elift1 (P.pthreadSigmask h ss)
157 | pthreadSiggetmask : HasIO io => io SigsetT
158 | pthreadSiggetmask = primIO P.pthreadSiggetmask
163 | pthreadKill : Has Errno es => EIO1 f => PthreadT -> Signal -> f es ()
164 | pthreadKill t s = elift1 (P.pthreadKill t s)