summary refs log tree commit diff stats
diff options
context:
space:
mode:
authoraguspiza <aguspiza@yahoo.es>2018-04-12 17:42:33 +0200
committerAndreas Rumpf <rumpf_a@web.de>2018-04-12 17:42:33 +0200
commit63160855aade7fd64755e4bdc78bf4694513df50 (patch)
treee970c49b50f9be16f3f67e3094df6ebad0ee7a66
parent85e21158db605e9acb788a75b43229487730299e (diff)
downloadNim-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.nim2
-rw-r--r--lib/posix/posix.nim16
-rw-r--r--lib/pure/ioselects/ioselectors_epoll.nim8
-rw-r--r--lib/pure/ioselects/ioselectors_poll.nim10
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)