about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/io/poll.nim6
-rw-r--r--src/server/buffer.nim3
2 files changed, 6 insertions, 3 deletions
diff --git a/src/io/poll.nim b/src/io/poll.nim
index 209218cd..62a34d91 100644
--- a/src/io/poll.nim
+++ b/src/io/poll.nim
@@ -54,7 +54,11 @@ proc trim(ctx: var PollData) =
   ctx.fds.setLen(i + 1)
 
 proc clear*(ctx: var PollData) =
-  ctx.fds.setLen(0)
+  # Do *not* set fds' len to 0, because this is called from inside the
+  # `events' iterator.
+  for it in ctx.fds.mitems:
+    it.fd = -1
+    it.revents = 0
 
 proc poll*(ctx: var PollData; timeout: cint) =
   ctx.trim()
diff --git a/src/server/buffer.nim b/src/server/buffer.nim
index 7a98a781..2de57c85 100644
--- a/src/server/buffer.nim
+++ b/src/server/buffer.nim
@@ -984,8 +984,7 @@ proc clone*(buffer: Buffer; newurl: URL): int {.proxy.} =
       response.outputId = outputId
       response.body = stream
       let data = OngoingData(response: response, stream: stream)
-      let fd = data.fd
-      buffer.pollData.register(fd, POLLIN)
+      buffer.pollData.register(data.fd, POLLIN)
       buffer.loader.put(data)
     if buffer.istream != nil:
       # We do not own our input stream, so we can't tee it.