parent
bf165cb43a
commit
95d8558f0c
2 changed files with 29 additions and 10 deletions
|
|
@ -1233,9 +1233,14 @@ else:
|
||||||
newList.add(cb)
|
newList.add(cb)
|
||||||
|
|
||||||
withData(p.selector, ident, adata) do:
|
withData(p.selector, ident, adata) do:
|
||||||
|
# descriptor still present in queue.
|
||||||
adata.rwlist = newList & adata.rwlist
|
adata.rwlist = newList & adata.rwlist
|
||||||
rLength = len(adata.readList)
|
rLength = len(adata.readList)
|
||||||
wLength = len(adata.writeList)
|
wLength = len(adata.writeList)
|
||||||
|
do:
|
||||||
|
# descriptor was unregistered in callback via `unregister()`.
|
||||||
|
rLength = -1
|
||||||
|
wLength = -1
|
||||||
|
|
||||||
template processCustomCallbacks(ident: untyped) =
|
template processCustomCallbacks(ident: untyped) =
|
||||||
# Process pending custom event callbacks. Custom events are
|
# Process pending custom event callbacks. Custom events are
|
||||||
|
|
@ -1254,11 +1259,16 @@ else:
|
||||||
var cb = curList[0]
|
var cb = curList[0]
|
||||||
if not cb(fd.AsyncFD):
|
if not cb(fd.AsyncFD):
|
||||||
newList.add(cb)
|
newList.add(cb)
|
||||||
else:
|
|
||||||
p.selector.unregister(fd)
|
|
||||||
|
|
||||||
withData(p.selector, ident, adata) do:
|
withData(p.selector, ident, adata) do:
|
||||||
|
# descriptor still present in queue.
|
||||||
adata.readList = newList & adata.readList
|
adata.readList = newList & adata.readList
|
||||||
|
if len(adata.readList) == 0:
|
||||||
|
# if no callbacks registered with descriptor, unregister it.
|
||||||
|
p.selector.unregister(fd)
|
||||||
|
do:
|
||||||
|
# descriptor was unregistered in callback via `unregister()`.
|
||||||
|
discard
|
||||||
|
|
||||||
proc poll*(timeout = 500) =
|
proc poll*(timeout = 500) =
|
||||||
var keys: array[64, ReadyKey]
|
var keys: array[64, ReadyKey]
|
||||||
|
|
@ -1302,15 +1312,10 @@ else:
|
||||||
# because state `data` can be modified in callback we need to update
|
# because state `data` can be modified in callback we need to update
|
||||||
# descriptor events with currently registered callbacks.
|
# descriptor events with currently registered callbacks.
|
||||||
if not custom:
|
if not custom:
|
||||||
var update = false
|
|
||||||
var newEvents: set[Event] = {}
|
var newEvents: set[Event] = {}
|
||||||
if rLength > 0:
|
if rLength != -1 and wLength != -1:
|
||||||
update = true
|
if rLength > 0: incl(newEvents, Event.Read)
|
||||||
incl(newEvents, Event.Read)
|
if wLength > 0: incl(newEvents, Event.Write)
|
||||||
if wLength > 0:
|
|
||||||
update = true
|
|
||||||
incl(newEvents, Event.Write)
|
|
||||||
if update:
|
|
||||||
p.selector.updateHandle(SocketHandle(fd), newEvents)
|
p.selector.updateHandle(SocketHandle(fd), newEvents)
|
||||||
inc(i)
|
inc(i)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,6 +61,17 @@ when defined(upcoming):
|
||||||
discard
|
discard
|
||||||
e.close()
|
e.close()
|
||||||
|
|
||||||
|
proc eventTest5331() =
|
||||||
|
# Event must not raise any exceptions while was unregistered inside of
|
||||||
|
# own callback.
|
||||||
|
# Issue #5331.
|
||||||
|
let e = newAsyncEvent()
|
||||||
|
addEvent(e) do (fd: AsyncFD) -> bool:
|
||||||
|
e.unregister()
|
||||||
|
e.close()
|
||||||
|
e.setEvent()
|
||||||
|
poll()
|
||||||
|
|
||||||
when ioselSupportedPlatform or defined(windows):
|
when ioselSupportedPlatform or defined(windows):
|
||||||
|
|
||||||
import osproc
|
import osproc
|
||||||
|
|
@ -124,6 +135,7 @@ when defined(upcoming):
|
||||||
eventTest()
|
eventTest()
|
||||||
eventTest5304()
|
eventTest5304()
|
||||||
eventTest5298()
|
eventTest5298()
|
||||||
|
eventTest5331()
|
||||||
processTest()
|
processTest()
|
||||||
signalTest()
|
signalTest()
|
||||||
echo "OK"
|
echo "OK"
|
||||||
|
|
@ -132,12 +144,14 @@ when defined(upcoming):
|
||||||
eventTest()
|
eventTest()
|
||||||
eventTest5304()
|
eventTest5304()
|
||||||
eventTest5298()
|
eventTest5298()
|
||||||
|
eventTest5331()
|
||||||
processTest()
|
processTest()
|
||||||
echo "OK"
|
echo "OK"
|
||||||
else:
|
else:
|
||||||
eventTest()
|
eventTest()
|
||||||
eventTest5304()
|
eventTest5304()
|
||||||
eventTest5298()
|
eventTest5298()
|
||||||
|
eventTest5331()
|
||||||
echo "OK"
|
echo "OK"
|
||||||
else:
|
else:
|
||||||
echo "OK"
|
echo "OK"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue