diff options
author | bptato <nincsnevem662@gmail.com> | 2025-01-12 01:20:08 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2025-01-12 01:25:18 +0100 |
commit | 60f26ec6c42a29fee4c4fc33fc7a171fa6114ccc (patch) | |
tree | b8a95de30b31945fe5f34e51cb1c4d13987822b2 /src/server/buffer.nim | |
parent | 2db84e9ea2cde323516586ec1478c953cc25f6cc (diff) | |
download | chawan-60f26ec6c42a29fee4c4fc33fc7a171fa6114ccc.tar.gz |
buffer, dynstream: fix clone race, recvmsg/sendmsg cast
The fds must be read before the other buffer resumes execution. Also, for some reason, CMSG_SPACE/CMSG_LEN are inconsistent in their size with controllen on BSDs...
Diffstat (limited to 'src/server/buffer.nim')
-rw-r--r-- | src/server/buffer.nim | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/server/buffer.nim b/src/server/buffer.nim index 08ff062c..a62c0659 100644 --- a/src/server/buffer.nim +++ b/src/server/buffer.nim @@ -1013,14 +1013,14 @@ proc clone*(buffer: Buffer; newurl: URL): int {.proxy.} = # the cache. (This also lets us skip suspend/resume in this case.) # We ignore errors; not much we can do with them here :/ discard buffer.rewind(buffer.bytesRead, unregister = false) - ps.write(char(0)) - buffer.url = newurl - for it in buffer.tasks.mitems: - it = 0 var sockFd: cint buffer.pstream.withPacketReader r: sockFd = r.recvAux.pop() buffer.pstream.sclose() + ps.write(char(0)) + buffer.url = newurl + for it in buffer.tasks.mitems: + it = 0 buffer.pstream = newSocketStream(sockFd) gpstream = buffer.pstream buffer.loader.clientPid = myPid |