diff options
author | alaviss <leorize+oss@disroot.org> | 2020-05-20 07:42:55 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-20 09:42:55 +0200 |
commit | 4ae341353de5c58dc339e47b0eec2bbb4649dc10 (patch) | |
tree | 70933c5a55b47bbce8a5044ff034536d19aa4aa5 /tests | |
parent | 1450924b1e68ad3cd2dc8db2c54f9741315ca212 (diff) | |
download | Nim-4ae341353de5c58dc339e47b0eec2bbb4649dc10.tar.gz |
asyncdispatch, asyncnet: add inheritance control (#14362)
* asyncdispatch, asyncnet: add inheritance control * asyncnet, asyncdispatch: cleanup
Diffstat (limited to 'tests')
-rw-r--r-- | tests/stdlib/tfdleak.nim | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/tests/stdlib/tfdleak.nim b/tests/stdlib/tfdleak.nim index 08ef06da3..c4f144db5 100644 --- a/tests/stdlib/tfdleak.nim +++ b/tests/stdlib/tfdleak.nim @@ -4,13 +4,15 @@ discard """ matrix: "; -d:nimInheritHandles" """ -import os, osproc, strutils, nativesockets, net, selectors, memfiles +import os, osproc, strutils, nativesockets, net, selectors, memfiles, + asyncdispatch, asyncnet when defined(windows): import winlean else: import posix -proc leakCheck(f: int | FileHandle | SocketHandle, msg: string, expectLeak = defined(nimInheritHandles)) = +proc leakCheck(f: AsyncFD | int | FileHandle | SocketHandle, msg: string, + expectLeak = defined(nimInheritHandles)) = discard startProcess( getAppFilename(), args = @[$f.int, msg, $expectLeak], @@ -40,14 +42,14 @@ proc main() = let sock = createNativeSocket() defer: close sock leakCheck(sock, "createNativeSocket()") - if sock.setInheritable(true): - leakCheck(sock, "createNativeSocket()", true) + if sock.setInheritable(not defined(nimInheritHandles)): + leakCheck(sock, "createNativeSocket()", not defined(nimInheritHandles)) else: raiseOSError osLastError() let server = newSocket() defer: close server - server.bindAddr() + server.bindAddr(address = "127.0.0.1") server.listen() let (_, port) = server.getLocalAddr @@ -74,6 +76,30 @@ proc main() = leakCheck(mf.mapHandle, "memfiles.open().mapHandle", false) else: leakCheck(mf.handle, "memfiles.open().handle", false) + + let sockAsync = createAsyncNativeSocket() + defer: closeSocket sockAsync + leakCheck(sockAsync, "createAsyncNativeSocket()") + if sockAsync.setInheritable(not defined(nimInheritHandles)): + leakCheck(sockAsync, "createAsyncNativeSocket()", not defined(nimInheritHandles)) + else: + raiseOSError osLastError() + + let serverAsync = newAsyncSocket() + defer: close serverAsync + serverAsync.bindAddr(address = "127.0.0.1") + serverAsync.listen() + let (_, portAsync) = serverAsync.getLocalAddr + + leakCheck(serverAsync.getFd, "newAsyncSocket()") + + let clientAsync = newAsyncSocket() + defer: close clientAsync + waitFor clientAsync.connect("127.0.0.1", portAsync) + + let inputAsync = waitFor serverAsync.accept() + + leakCheck(inputAsync.getFd, "accept() async") else: let fd = parseInt(paramStr 1) |