diff options
author | aguspiza <aguspiza@yahoo.es> | 2018-04-12 17:42:33 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2018-04-12 17:42:33 +0200 |
commit | 63160855aade7fd64755e4bdc78bf4694513df50 (patch) | |
tree | e970c49b50f9be16f3f67e3094df6ebad0ee7a66 | |
parent | 85e21158db605e9acb788a75b43229487730299e (diff) | |
download | Nim-63160855aade7fd64755e4bdc78bf4694513df50.tar.gz |
Move RLimit and getrlimit to posix.nim and add setrlimit to easily limit FD allocation (#7564)
-rw-r--r-- | lib/posix/linux.nim | 2 | ||||
-rw-r--r-- | lib/posix/posix.nim | 16 | ||||
-rw-r--r-- | lib/pure/ioselects/ioselectors_epoll.nim | 8 | ||||
-rw-r--r-- | lib/pure/ioselects/ioselectors_poll.nim | 10 |
4 files changed, 18 insertions, 18 deletions
diff --git a/lib/posix/linux.nim b/lib/posix/linux.nim index 8786ab535..6f9f75e34 100644 --- a/lib/posix/linux.nim +++ b/lib/posix/linux.nim @@ -27,4 +27,4 @@ proc clone*(fn: pointer; child_stack: pointer; flags: cint; arg: pointer; ptid: ptr Pid; tls: pointer; ctid: ptr Pid): cint {.importc, header: "<sched.h>".} -proc pipe2*(a: array[0..1, cint], flags: cint): cint {.importc, header: "<unistd.h>".} \ No newline at end of file +proc pipe2*(a: array[0..1, cint], flags: cint): cint {.importc, header: "<unistd.h>".} diff --git a/lib/posix/posix.nim b/lib/posix/posix.nim index fba35868c..a23d76050 100644 --- a/lib/posix/posix.nim +++ b/lib/posix/posix.nim @@ -973,3 +973,19 @@ template onSignal*(signals: varargs[cint], body: untyped) = proc (sig: cint) {.noconv.} = body ) + +type + RLimit* {.importc: "struct rlimit", + header: "<sys/resource.h>", pure, final.} = object + rlim_cur*: int + rlim_max*: int + ## The getrlimit() and setrlimit() system calls get and set resource limits respectively. + ## Each resource has an associated soft and hard limit, as defined by the RLimit structure + +proc setrlimit*(resource: cint, rlp: var RLimit): cint + {.importc: "setrlimit",header: "<sys/resource.h>".} + ## The setrlimit() system calls sets resource limits. + +proc getrlimit*(resource: cint, rlp: var RLimit): cint + {.importc: "getrlimit",header: "<sys/resource.h>".} + ## The getrlimit() system call gets resource limits. diff --git a/lib/pure/ioselects/ioselectors_epoll.nim b/lib/pure/ioselects/ioselectors_epoll.nim index 65efeabab..36145abc7 100644 --- a/lib/pure/ioselects/ioselectors_epoll.nim +++ b/lib/pure/ioselects/ioselectors_epoll.nim @@ -48,14 +48,6 @@ when not defined(android): proc signalfd(fd: cint, mask: var Sigset, flags: cint): cint {.cdecl, importc: "signalfd", header: "<sys/signalfd.h>".} -type - RLimit {.importc: "struct rlimit", - header: "<sys/resource.h>", pure, final.} = object - rlim_cur: int - rlim_max: int -proc getrlimit(resource: cint, rlp: var RLimit): cint - {.importc: "getrlimit",header: "<sys/resource.h>".} - when hasThreadSupport: type SelectorImpl[T] = object diff --git a/lib/pure/ioselects/ioselectors_poll.nim b/lib/pure/ioselects/ioselectors_poll.nim index 081c57fa6..c36750c8d 100644 --- a/lib/pure/ioselects/ioselectors_poll.nim +++ b/lib/pure/ioselects/ioselectors_poll.nim @@ -40,14 +40,6 @@ type wfd: cint SelectEvent* = ptr SelectEventImpl -type - rlimit {.importc: "struct rlimit", - header: "<sys/resource.h>", pure, final.} = object - rlim_cur: int - rlim_max: int -proc getrlimit(resource: cint, rlp: var rlimit): cint - {.importc: "getrlimit",header: "<sys/resource.h>".} - when hasThreadSupport: template withPollLock[T](s: Selector[T], body: untyped) = acquire(s.lock) @@ -61,7 +53,7 @@ else: body proc newSelector*[T](): Selector[T] = - var a = rlimit() + var a = RLimit() if getrlimit(posix.RLIMIT_NOFILE, a) != 0: raiseIOSelectorsError(osLastError()) var maxFD = int(a.rlim_max) |