* Fix #5128, #5184. Removed flush() procedure from ioselectors.nim Changed methods of work with application-driven data * Make cache switch for kqueue, update test for it. * Fix registerProcess bug returns wrong id. Fix tupcoming_async test to compile with upcoming again. Change socket() as unique identifier to dup(socket) as unique identifier.
This commit is contained in:
parent
f8736dcfb7
commit
108f5e688e
8 changed files with 674 additions and 479 deletions
|
|
@ -37,9 +37,6 @@ when not defined(windows):
|
|||
var client_socket = create_test_socket()
|
||||
var server_socket = create_test_socket()
|
||||
|
||||
registerHandle(selector, server_socket, {Event.Read}, 0)
|
||||
registerHandle(selector, client_socket, {Event.Write}, 0)
|
||||
|
||||
var option : int32 = 1
|
||||
if setsockopt(server_socket, cint(SOL_SOCKET), cint(SO_REUSEADDR),
|
||||
addr(option), sizeof(option).SockLen) < 0:
|
||||
|
|
@ -50,16 +47,19 @@ when not defined(windows):
|
|||
aiList.ai_addrlen.Socklen) < 0'i32:
|
||||
dealloc(aiList)
|
||||
raiseOSError(osLastError())
|
||||
discard server_socket.listen()
|
||||
if server_socket.listen() == -1:
|
||||
raiseOSError(osLastError())
|
||||
dealloc(aiList)
|
||||
|
||||
aiList = getAddrInfo("127.0.0.1", Port(13337))
|
||||
discard posix.connect(client_socket, aiList.ai_addr,
|
||||
aiList.ai_addrlen.Socklen)
|
||||
|
||||
registerHandle(selector, server_socket, {Event.Read}, 0)
|
||||
registerHandle(selector, client_socket, {Event.Write}, 0)
|
||||
|
||||
dealloc(aiList)
|
||||
discard selector.select(100)
|
||||
var rc1 = selector.select(100)
|
||||
assert(len(rc1) == 2)
|
||||
|
||||
var sockAddress: SockAddr
|
||||
var addrLen = sizeof(sockAddress).Socklen
|
||||
|
|
@ -126,15 +126,15 @@ when not defined(windows):
|
|||
var selector = newSelector[int]()
|
||||
var event = newSelectEvent()
|
||||
selector.registerEvent(event, 1)
|
||||
selector.flush()
|
||||
var rc0 = selector.select(0)
|
||||
event.setEvent()
|
||||
var rc1 = selector.select(0)
|
||||
event.setEvent()
|
||||
var rc2 = selector.select(0)
|
||||
var rc3 = selector.select(0)
|
||||
assert(len(rc1) == 1 and len(rc2) == 1 and len(rc3) == 0)
|
||||
var ev1 = rc1[0].data
|
||||
var ev2 = rc2[0].data
|
||||
assert(len(rc0) == 0 and len(rc1) == 1 and len(rc2) == 1 and len(rc3) == 0)
|
||||
var ev1 = selector.getData(rc1[0].fd)
|
||||
var ev2 = selector.getData(rc2[0].fd)
|
||||
assert(ev1 == 1 and ev2 == 1)
|
||||
selector.unregister(event)
|
||||
event.close()
|
||||
|
|
@ -150,11 +150,11 @@ when not defined(windows):
|
|||
var rc2 = selector.select(140)
|
||||
assert(len(rc1) == 1 and len(rc2) == 1)
|
||||
selector.unregister(timer)
|
||||
selector.flush()
|
||||
discard selector.select(0)
|
||||
selector.registerTimer(100, true, 0)
|
||||
var rc3 = selector.select(120)
|
||||
var rc4 = selector.select(120)
|
||||
assert(len(rc3) == 1 and len(rc4) == 0)
|
||||
var rc5 = selector.select(120)
|
||||
assert(len(rc4) == 1 and len(rc5) == 0)
|
||||
assert(selector.isEmpty())
|
||||
selector.close()
|
||||
result = true
|
||||
|
|
@ -193,12 +193,14 @@ when not defined(windows):
|
|||
var s1 = selector.registerSignal(SIGUSR1, 1)
|
||||
var s2 = selector.registerSignal(SIGUSR2, 2)
|
||||
var s3 = selector.registerSignal(SIGTERM, 3)
|
||||
selector.flush()
|
||||
|
||||
discard selector.select(0)
|
||||
discard posix.kill(pid, SIGUSR1)
|
||||
discard posix.kill(pid, SIGUSR2)
|
||||
discard posix.kill(pid, SIGTERM)
|
||||
var rc = selector.select(0)
|
||||
var cd0 = selector.getData(rc[0].fd)
|
||||
var cd1 = selector.getData(rc[1].fd)
|
||||
var cd2 = selector.getData(rc[2].fd)
|
||||
selector.unregister(s1)
|
||||
selector.unregister(s2)
|
||||
selector.unregister(s3)
|
||||
|
|
@ -211,7 +213,7 @@ when not defined(windows):
|
|||
raiseOSError(osLastError())
|
||||
|
||||
assert(len(rc) == 3)
|
||||
assert(rc[0].data + rc[1].data + rc[2].data == 6) # 1 + 2 + 3
|
||||
assert(cd0 + cd1 + cd2 == 6, $(cd0 + cd1 + cd2)) # 1 + 2 + 3
|
||||
assert(equalMem(addr sigset1o, addr sigset2o, sizeof(Sigset)))
|
||||
assert(selector.isEmpty())
|
||||
result = true
|
||||
|
|
@ -286,8 +288,8 @@ when not defined(windows):
|
|||
events: set[Event]
|
||||
|
||||
proc vnode_test(): bool =
|
||||
proc validate[T](test: openarray[ReadyKey[T]],
|
||||
check: openarray[valType]): bool =
|
||||
proc validate(test: openarray[ReadyKey],
|
||||
check: openarray[valType]): bool =
|
||||
result = false
|
||||
if len(test) == len(check):
|
||||
for checkItem in check:
|
||||
|
|
@ -300,7 +302,7 @@ when not defined(windows):
|
|||
if not result:
|
||||
break
|
||||
|
||||
var res: seq[ReadyKey[int]]
|
||||
var res: seq[ReadyKey]
|
||||
var selector = newSelector[int]()
|
||||
var events = {Event.VnodeWrite, Event.VnodeDelete, Event.VnodeExtend,
|
||||
Event.VnodeAttrib, Event.VnodeLink, Event.VnodeRename,
|
||||
|
|
@ -315,7 +317,7 @@ when not defined(windows):
|
|||
raiseOsError(osLastError())
|
||||
|
||||
selector.registerVnode(dirfd, events, 1)
|
||||
selector.flush()
|
||||
discard selector.select(0)
|
||||
|
||||
# chmod testDirectory to 0777
|
||||
chmodPath(testDirectory, 0x1FF)
|
||||
|
|
@ -337,7 +339,6 @@ when not defined(windows):
|
|||
# open test directory for watching
|
||||
var testfd = openWatch(testDirectory & "/test")
|
||||
selector.registerVnode(testfd, events, 2)
|
||||
selector.flush()
|
||||
doAssert(len(selector.select(0)) == 0)
|
||||
|
||||
# rename test directory
|
||||
|
|
@ -381,7 +382,7 @@ when not defined(windows):
|
|||
|
||||
testfd = openWatch(testDirectory & "/testfile")
|
||||
selector.registerVnode(testfd, events, 1)
|
||||
selector.flush()
|
||||
discard selector.select(0)
|
||||
|
||||
# write data to test file
|
||||
writeFile(testDirectory & "/testfile", "TESTDATA")
|
||||
|
|
@ -433,7 +434,6 @@ when not defined(windows):
|
|||
proc event_wait_thread(event: SelectEvent) {.thread.} =
|
||||
var selector = newSelector[int]()
|
||||
selector.registerEvent(event, 1)
|
||||
selector.flush()
|
||||
var rc = selector.select(1000)
|
||||
if len(rc) == 1:
|
||||
inc(counter)
|
||||
|
|
@ -573,15 +573,15 @@ else:
|
|||
var selector = newSelector[int]()
|
||||
var event = newSelectEvent()
|
||||
selector.registerEvent(event, 1)
|
||||
selector.flush()
|
||||
discard selector.select(0)
|
||||
event.setEvent()
|
||||
var rc1 = selector.select(0)
|
||||
event.setEvent()
|
||||
var rc2 = selector.select(0)
|
||||
var rc3 = selector.select(0)
|
||||
assert(len(rc1) == 1 and len(rc2) == 1 and len(rc3) == 0)
|
||||
var ev1 = rc1[0].data
|
||||
var ev2 = rc2[0].data
|
||||
var ev1 = selector.getData(rc1[0].fd)
|
||||
var ev2 = selector.getData(rc2[0].fd)
|
||||
assert(ev1 == 1 and ev2 == 1)
|
||||
selector.unregister(event)
|
||||
event.close()
|
||||
|
|
@ -595,7 +595,6 @@ else:
|
|||
proc event_wait_thread(event: SelectEvent) {.thread.} =
|
||||
var selector = newSelector[int]()
|
||||
selector.registerEvent(event, 1)
|
||||
selector.flush()
|
||||
var rc = selector.select(500)
|
||||
if len(rc) == 1:
|
||||
inc(counter)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue