summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2016-09-04 23:41:18 +0200
committerAndreas Rumpf <rumpf_a@web.de>2016-09-04 23:41:18 +0200
commita5be42c02423040bf396bd266117efa8ba8b2fd3 (patch)
tree867134a314f3c7bae141cb368eb1f083b4e06ef3
parentdfa0699e732619fc2e47aa8ad6990296d93e67b9 (diff)
parentb676a08b3a4632d80bf46cb57d8e72ddf3398b39 (diff)
downloadNim-a5be42c02423040bf396bd266117efa8ba8b2fd3.tar.gz
Merge branch 'async-readwrite-no-conflict' of https://github.com/endragor/Nim into endragor-async-readwrite-no-conflict
-rw-r--r--lib/upcoming/asyncdispatch.nim10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/upcoming/asyncdispatch.nim b/lib/upcoming/asyncdispatch.nim
index f333244c6..ce44e8a6a 100644
--- a/lib/upcoming/asyncdispatch.nim
+++ b/lib/upcoming/asyncdispatch.nim
@@ -1373,19 +1373,25 @@ else:
 
   proc addRead*(fd: AsyncFD, cb: Callback) =
     let p = getGlobalDispatcher()
+    var newEvents = {Event.Read}
     withData(p.selector, fd.SocketHandle, adata) do:
       adata.readCB = cb
+      if adata.writeCB != nil:
+        newEvents.incl(Event.Write)
     do:
       raise newException(ValueError, "File descriptor not registered.")
-    p.selector.updateHandle(fd.SocketHandle, {Event.Read})
+    p.selector.updateHandle(fd.SocketHandle, newEvents)
 
   proc addWrite*(fd: AsyncFD, cb: Callback) =
     let p = getGlobalDispatcher()
+    var newEvents = {Event.Write}
     withData(p.selector, fd.SocketHandle, adata) do:
       adata.writeCB = cb
+      if adata.readCB != nil:
+        newEvents.incl(Event.Read)
     do:
       raise newException(ValueError, "File descriptor not registered.")
-    p.selector.updateHandle(fd.SocketHandle, {Event.Write})
+    p.selector.updateHandle(fd.SocketHandle, newEvents)
 
   proc poll*(timeout = 500) =
     var keys: array[64, ReadyKey[AsyncData]]