-
Notifications
You must be signed in to change notification settings - Fork 735
Description
Expected behavior
Not to crash with SIGPIPE
Actual behavior
While inside the closure run from NIOAsyncChannel.executeThenClose if the other side closes the connection and we then write a couple of packets and exit the closure we can get a crash writing to the socket. As far as I can tell NIOAsyncChannelHandlerWriterDelegate.didYield(_:) is called before the closure exits, but NIOAsyncChannelHandlerWriterDelegate._didYield(_:) is called later.
I found this while testing hummingbird-websocket. I have a test to verify that the connection is closed if a ping doesn't receive a pong in time. In the test I have a client that doesn't process any incoming frames for a long enough time such that the server assumes the client is hung and sends a connectionClose packet and then immediately closes the connection. Once the client starts processing frames it responds to the ping and the connection close by sending a pong and connection close and then immediately exits. Not always but quite regularly the client will receive a SIGPIPE interrupt with this call stack.
writev (Unknown Source:0)
closure #1 in static Posix.writev(descriptor:iovecs:) (.build/checkouts/swift-nio/Sources/NIOPosix/System.swift:727)
partial apply for closure #1 in static Posix.writev(descriptor:iovecs:) (Unknown Source:0)
syscall<τ_0_0>(blocking:where:_:) (.build/checkouts/swift-nio/Sources/NIOPosix/System.swift:312)
static Posix.writev(descriptor:iovecs:) (.build/checkouts/swift-nio/Sources/NIOPosix/System.swift:726)
static NIOBSDSocket.writev(socket:iovecs:) (.build/checkouts/swift-nio/Sources/NIOPosix/BSDSocketAPIPosix.swift:137)
closure #1 in Socket.writev(iovecs:) (.build/checkouts/swift-nio/Sources/NIOPosix/Socket.swift:179)
partial apply for closure #1 in Socket.writev(iovecs:) (Unknown Source:0)
BaseSocket.withUnsafeHandle<τ_0_0>(_:) (.build/checkouts/swift-nio/Sources/NIOPosix/BaseSocket.swift:387)
Socket.writev(iovecs:) (.build/checkouts/swift-nio/Sources/NIOPosix/Socket.swift:178)
protocol witness for SocketProtocol.writev(iovecs:) in conformance Socket (Unknown Source:0)
closure #2 in BaseStreamSocketChannel.writeToSocket() (.build/checkouts/swift-nio/Sources/NIOPosix/BaseStreamSocketChannel.swift:175)
partial apply for closure #2 in BaseStreamSocketChannel.writeToSocket() (Unknown Source:0)
closure #2 in closure #1 in PendingStreamWritesManager.triggerAppropriateWriteOperations(scalarBufferWriteOperation:vectorBufferWriteOperation:scalarFileWriteOperation:) (.build/checkouts/swift-nio/Sources/NIOPosix/PendingWritesManager.swift:408)
partial apply for closure #2 in closure #1 in PendingStreamWritesManager.triggerAppropriateWriteOperations(scalarBufferWriteOperation:vectorBufferWriteOperation:scalarFileWriteOperation:) (Unknown Source:0)
closure #1 in PendingStreamWritesManager.triggerVectorBufferWrite(_:) (.build/checkouts/swift-nio/Sources/NIOPosix/PendingWritesManager.swift:494)
partial apply for closure #1 in PendingStreamWritesManager.triggerVectorBufferWrite(_:) (Unknown Source:0)
closure #1 in doPendingWriteVectorOperation(pending:bufferPool:_:) (.build/checkouts/swift-nio/Sources/NIOPosix/PendingWritesManager.swift:89)
partial apply for closure #1 in doPendingWriteVectorOperation(pending:bufferPool:_:) (Unknown Source:0)
closure #1 in PooledBuffer.withUnsafePointers<τ_0_0>(_:) (.build/checkouts/swift-nio/Sources/NIOPosix/Pool.swift:80)
partial apply for closure #1 in PooledBuffer.withUnsafePointers<τ_0_0>(_:) (Unknown Source:0)
closure #1 in PooledBuffer.BackingStorage.withUnsafeMutableTypedPointers<τ_0_0>(_:) (.build/checkouts/swift-nio/Sources/NIOPosix/Pool.swift:212)
partial apply for closure #1 in PooledBuffer.BackingStorage.withUnsafeMutableTypedPointers<τ_0_0>(_:) (Unknown Source:0)
ManagedBuffer<>.withUnsafeMutablePointers<τ_0_0, τ_0_1>(_:) (Unknown Source:0)
PooledBuffer.BackingStorage.withUnsafeMutableTypedPointers<τ_0_0>(_:) (.build/checkouts/swift-nio/Sources/NIOPosix/Pool.swift:196)
PooledBuffer.withUnsafePointers<τ_0_0>(_:) (.build/checkouts/swift-nio/Sources/NIOPosix/Pool.swift:79)
doPendingWriteVectorOperation(pending:bufferPool:_:) (.build/checkouts/swift-nio/Sources/NIOPosix/PendingWritesManager.swift:49)
PendingStreamWritesManager.triggerVectorBufferWrite(_:) (.build/checkouts/swift-nio/Sources/NIOPosix/PendingWritesManager.swift:491)
closure #1 in PendingStreamWritesManager.triggerAppropriateWriteOperations(scalarBufferWriteOperation:vectorBufferWriteOperation:scalarFileWriteOperation:) (.build/checkouts/swift-nio/Sources/NIOPosix/PendingWritesManager.swift:408)
partial apply for closure #1 in PendingStreamWritesManager.triggerAppropriateWriteOperations(scalarBufferWriteOperation:vectorBufferWriteOperation:scalarFileWriteOperation:) (Unknown Source:0)
PendingWritesManager.triggerWriteOperations(triggerOneWriteOperation:) (.build/checkouts/swift-nio/Sources/NIOPosix/PendingWritesManager.swift:663)
PendingStreamWritesManager.triggerAppropriateWriteOperations(scalarBufferWriteOperation:vectorBufferWriteOperation:scalarFileWriteOperation:) (.build/checkouts/swift-nio/Sources/NIOPosix/PendingWritesManager.swift:403)
BaseStreamSocketChannel.writeToSocket() (.build/checkouts/swift-nio/Sources/NIOPosix/BaseStreamSocketChannel.swift:164)
BaseSocketChannel.flushNow() (.build/checkouts/swift-nio/Sources/NIOPosix/BaseSocketChannel.swift:568)
BaseSocketChannel.flush0() (.build/checkouts/swift-nio/Sources/NIOPosix/BaseSocketChannel.swift:780)
protocol witness for ChannelCore.flush0() in conformance BaseSocketChannel<τ_0_0> (Unknown Source:0)
HeadChannelHandler.flush(context:) (.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1698)
protocol witness for _ChannelOutboundHandler.flush(context:) in conformance HeadChannelHandler (Unknown Source:0)
ChannelHandlerContext.invokeFlush() (.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:2185)
ChannelHandlerContext.flush() (.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1980)
_ChannelOutboundHandler.flush(context:) (.build/checkouts/swift-nio/Sources/NIOCore/ChannelHandler.swift:253)
protocol witness for _ChannelOutboundHandler.flush(context:) in conformance WebSocketFrameEncoder (Unknown Source:0)
ChannelHandlerContext.invokeFlush() (.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:2185)
ChannelHandlerContext.invokeFlush() (.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:2187)
ChannelHandlerContext.invokeFlush() (.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:2187)
ChannelHandlerContext.flush() (.build/checkouts/swift-nio/Sources/NIOCore/ChannelPipeline.swift:1980)
NIOAsyncChannelHandler._doOutboundWrite(context:write:) (.build/checkouts/swift-nio/Sources/NIOCore/AsyncChannel/AsyncChannelHandler.swift:489)
NIOAsyncChannelHandler._didYield(element:) (.build/checkouts/swift-nio/Sources/NIOCore/AsyncChannel/AsyncChannelHandler.swift:463)
implicit closure #4 in implicit closure #3 in NIOAsyncChannelHandlerWriterDelegate.init<τ_0_0, τ_0_1>(handler:) (Unknown Source:0)
closure #1 in NIOAsyncChannelHandlerWriterDelegate.didYield(_:) (.build/checkouts/swift-nio/Sources/NIOCore/AsyncChannel/AsyncChannelHandler.swift:413)
closure #1 in SelectableEventLoop.run(_:) (.build/checkouts/swift-nio/Sources/NIOPosix/SelectableEventLoop.swift:616)
partial apply for closure #1 in SelectableEventLoop.run(_:) (Unknown Source:0)
withAutoReleasePool<τ_0_0>(_:) (.build/checkouts/swift-nio/Sources/NIOPosix/SelectableEventLoop.swift:47)
SelectableEventLoop.run(_:) (.build/checkouts/swift-nio/Sources/NIOPosix/SelectableEventLoop.swift:613)
SelectableEventLoop.runOneLoopTick(selfIdentifier:) (.build/checkouts/swift-nio/Sources/NIOPosix/SelectableEventLoop.swift:807)
SelectableEventLoop.run() (.build/checkouts/swift-nio/Sources/NIOPosix/SelectableEventLoop.swift:921)
static MultiThreadedEventLoopGroup.runTheLoop(thread:uniqueID:parentGroup:canEventLoopBeShutdownIndividually:selectorFactory:initializer:metricsDelegate:_:) (.build/checkouts/swift-nio/Sources/NIOPosix/MultiThreadedEventLoopGroup.swift:115)
closure #1 in static MultiThreadedEventLoopGroup.setupThreadAndEventLoop(name:uniqueID:parentGroup:selectorFactory:initializer:metricsDelegate:) (.build/checkouts/swift-nio/Sources/NIOPosix/MultiThreadedEventLoopGroup.swift:137)
partial apply for closure #1 in static MultiThreadedEventLoopGroup.setupThreadAndEventLoop(name:uniqueID:parentGroup:selectorFactory:initializer:metricsDelegate:) (Unknown Source:0)
thunk for @escaping @callee_guaranteed (@guaranteed NIOThread) -> () (Unknown Source:0)
Steps to reproduce
If you run testAutoPing from the hummingbird-websocket tests. The test runs both a server and a client. It appears this test only fails on Linux
If possible, minimal yet complete reproducer code (or URL to code)
Sorry haven't been able to write a minimal reproducer.
But the series of actions that cause this seems to be, have remote close the connection, send two packets on client, exit NIOAsyncChannel.executeThenClose
SwiftNIO version/commit hash
v2.29.2
System & version information
NIO diagnose (905df2e2e25a30cc0d1be9313129e76d82801c4d .build/checkouts/swift-nio/scripts/nio-diagnose)
System information
System versions
Command: composite_command_system_versions_linux
Wed Jan 14 05:23:04 PM UTC 2026
Linux becfe55924d3 5.15.49-linuxkit-pr #1 SMP PREEMPT Thu May 25 07:27:39 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux
Swift version 6.2 (swift-6.2-RELEASE)
Target: aarch64-unknown-linux-gnu
uid=1001(vscode) gid=1001(vscode) groups=1001(vscode)
TCP connections
Command: netstat --tcp -peona
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name Timer
tcp 0 0 127.0.0.1:35815 0.0.0.0:* LISTEN 1001 1400567 44595/hummingbird-w off (0.00/0/0)
tcp 0 0 127.0.0.1:35253 0.0.0.0:* LISTEN 1001 1113312 233/node off (0.00/0/0)
tcp 0 0 127.0.0.1:35253 127.0.0.1:44362 ESTABLISHED 1001 1114385 233/node off (0.00/0/0)
tcp 0 0 127.0.0.1:35253 127.0.0.1:44372 ESTABLISHED 1001 1112467 323/node off (0.00/0/0)
tcp 0 0 127.0.0.1:35815 127.0.0.1:41256 ESTABLISHED 1001 1400568 44595/hummingbird-w off (0.00/0/0)
tcp 0 0 127.0.0.1:41256 127.0.0.1:35815 ESTABLISHED 1001 1403027 44595/hummingbird-w off (0.00/0/0)
tcp 0 0 172.17.0.2:45948 20.26.156.215:443 TIME_WAIT 0 0 - timewait (33.47/0/0)
tcp 0 0 127.0.0.1:44372 127.0.0.1:35253 ESTABLISHED 1001 1114426 282/node off (0.00/0/0)
tcp 0 0 127.0.0.1:44362 127.0.0.1:35253 ESTABLISHED 1001 1114384 265/node off (0.00/0/0)
UDP
Command: netstat --udp -peona
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name Timer
Unix Domain Sockets
Command: netstat --protocol=unix -peona
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 1115366 323/node /tmp/vscode-git-6fc698363c.sock
unix 2 [ ACC ] STREAM LISTENING 1112471 323/node /tmp/vscode-ipc-68d64989-4e11-4ae4-b073-ab7fd92f97b8.sock
unix 2 [ ACC ] STREAM LISTENING 1113280 195/node /tmp/vscode-remote-containers-ipc-9be10421-3ee5-49b0-a59b-e6bcd604
76f8.sock
unix 2 [ ACC ] STREAM LISTENING 1113281 195/node /tmp/vscode-ssh-auth-9be10421-3ee5-49b0-a59b-e6bcd60476f8.sock
unix 2 [ ACC ] STREAM LISTENING 1399519 233/node /tmp/vscode-ipc-fa9be874-7bc1-4a19-b125-b0324d5106f6.sock
unix 2 [ ACC ] STREAM LISTENING 1403811 233/node /tmp/vscode-ipc-62f6e8f5-ca31-43a0-a392-cc853e8d5d64.sock
unix 3 [ ] STREAM CONNECTED 1118347 323/node
unix 3 [ ] STREAM CONNECTED 1417515 1734/node
unix 3 [ ] STREAM CONNECTED 1166856 9091/sh
unix 3 [ ] STREAM CONNECTED 1115289 233/node
unix 3 [ ] STREAM CONNECTED 1113343 233/node
unix 3 [ ] STREAM CONNECTED 1161976 323/node
unix 3 [ ] STREAM CONNECTED 1118350 1559/sourcekit-lsp
unix 3 [ ] STREAM CONNECTED 1115364 378/node
unix 3 [ ] STREAM CONNECTED 1166853 323/node
unix 3 [ ] STREAM CONNECTED 1115287 233/node
unix 3 [ ] STREAM CONNECTED 1402980 44548/lldb-dap
unix 3 [ ] STREAM CONNECTED 1115359 323/node
unix 3 [ ] STREAM CONNECTED 1402981 44559/lldb-server
unix 3 [ ] STREAM CONNECTED 1115357 323/node
unix 3 [ ] STREAM CONNECTED 1161975 9227/sh
unix 3 [ ] STREAM CONNECTED 1400427 44548/lldb-dap
unix 3 [ ] STREAM CONNECTED 1166854 9091/sh
unix 3 [ ] STREAM CONNECTED 1417514 45870/sh
unix 3 [ ] STREAM CONNECTED 1161974 323/node
unix 3 [ ] STREAM CONNECTED 1118352 1559/sourcekit-lsp
unix 3 [ ] STREAM CONNECTED 1118348 1559/sourcekit-lsp
unix 3 [ ] STREAM CONNECTED 1166857 323/node
unix 3 [ ] STREAM CONNECTED 1161979 9227/sh
unix 3 [ ] STREAM CONNECTED 1113344 298/node
unix 3 [ ] STREAM CONNECTED 1400426 323/node
unix 3 [ ] STREAM CONNECTED 1166858 9091/sh
unix 3 [ ] STREAM CONNECTED 1115358 378/node
unix 3 [ ] STREAM CONNECTED 1115283 233/node
unix 3 [ ] STREAM CONNECTED 1117032 233/node
unix 3 [ ] STREAM CONNECTED 1118349 323/node
unix 3 [ ] STREAM CONNECTED 1115361 323/node
unix 3 [ ] STREAM CONNECTED 1417513 1734/node
unix 3 [ ] STREAM CONNECTED 1115286 323/node
unix 3 [ ] STREAM CONNECTED 1115290 323/node
unix 3 [ ] STREAM CONNECTED 1417512 45870/sh
unix 3 [ ] STREAM CONNECTED 1166855 323/node
unix 3 [ ] STREAM CONNECTED 1117033 1734/node
unix 3 [ ] STREAM CONNECTED 1161978 323/node
unix 3 [ ] STREAM CONNECTED 1417511 1734/node
unix 3 [ ] STREAM CONNECTED 1161977 9227/sh
unix 3 [ ] STREAM CONNECTED 1400428 323/node
unix 3 [ ] STREAM CONNECTED 1115284 323/node
unix 3 [ ] STREAM CONNECTED 1115360 378/node
unix 3 [ ] STREAM CONNECTED 1118351 323/node
unix 3 [ ] STREAM CONNECTED 1417516 45870/sh
unix 3 [ ] STREAM CONNECTED 1400429 44548/lldb-dap
unix 3 [ ] STREAM CONNECTED 1115285 233/node
unix 3 [ ] STREAM CONNECTED 1115288 323/node
unix 3 [ ] STREAM CONNECTED 1115362 378/node
unix 3 [ ] STREAM CONNECTED 1115363 323/node
System-wide network statistics
Command: netstat -s
Ip:
Forwarding: 1
72668 total packets received
0 forwarded
0 incoming packets discarded
72668 incoming packets delivered
72747 requests sent out
Icmp:
0 ICMP messages received
0 input ICMP message failed
ICMP input histogram:
0 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
Tcp:
228 active connection openings
53 passive connection openings
0 failed connection attempts
51 connection resets received
6 connections established
72422 segments received
72489 segments sent out
12 segments retransmitted
0 bad segments received
20 resets sent
Udp:
246 packets received
0 packets to unknown port received
0 packet receive errors
246 packets sent
0 receive buffer errors
0 send buffer errors
UdpLite:
TcpExt:
117 TCP sockets finished time wait in fast timer
3742 delayed acks sent
3 delayed acks further delayed because of locked socket
Quick ack mode was activated 3 times
24965 packet headers predicted
9469 acknowledgments not containing data payload received
27745 predicted acknowledgments
TCPLostRetransmit: 3
TCPTimeouts: 9
TCPLossProbes: 4
TCPBacklogCoalesce: 785
TCPDSACKOldSent: 3
TCPDSACKRecv: 3
2 connections reset due to unexpected data
TCPDSACKIgnoredNoUndo: 3
TCPRcvCoalesce: 845
TCPSynRetrans: 9
TCPOrigDataSent: 43015
TCPHystartTrainDetect: 2
TCPHystartTrainCwnd: 69
TCPKeepAlive: 13
TCPDelivered: 43086
TcpTimeoutRehash: 9
TCPDSACKRecvSegs: 3
IpExt:
InOctets: 271689177
OutOctets: 269735551
InNoECTPkts: 72668
processes
top
Command: bash -c TERM=dumb top -H -n 1
top - 17:23:04 up 6:28, 0 user, load average: 0.27, 0.15, 0.29
Threads: 135 total, 1 running, 124 sleeping, 10 stopped, 0 zombie
%Cpu(s): 0.0 us, 2.3 sy, 0.0 ni, 97.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7951.4 total, 475.5 free, 4557.7 used, 3211.8 buff/cache
MiB Swap: 1024.0 total, 708.3 free, 315.7 used. 3393.6 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 2380 1596 1496 S 0.0 0.0 0:03.41 sh
21 root 20 0 2380 756 680 S 0.0 0.0 0:00.00 sh
27 root 20 0 2380 692 616 S 0.0 0.0 0:00.00 sh
28 vscode 20 0 2380 1600 1496 S 0.0 0.0 0:00.06 sh
106 root 20 0 2380 696 616 S 0.0 0.0 0:00.00 sh
158 vscode 20 0 2380 696 616 S 0.0 0.0 0:00.00 sh
195 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.13 node
203 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.00 DelayedT+
204 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.00 node
205 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.00 node
206 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.00 node
207 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.00 node
208 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.00 node
209 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.00 libuv-wo+
210 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.00 libuv-wo+
211 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.00 libuv-wo+
212 vscode 20 0 779316 51048 43144 S 0.0 0.6 0:00.00 libuv-wo+
ps
Command: ps auxw
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2380 1596 ? Ss 16:09 0:03 /bin/sh -c echo Container started trap "exit 0" 15 exec "$@" while sleep 1 & wai
t $!; do :; done -
root 21 0.0 0.0 2380 756 ? Ss 16:09 0:00 /bin/sh -c echo "New container started. Keep-alive process started." ; export VSC
ODE_REMOTE_CONTAINERS_SESSION=e301a587-4624-4175-88a0-1ce599b7c80f1768406935235 ; /bin/sh
root 27 0.0 0.0 2380 692 ? S 16:09 0:00 /bin/sh
vscode 28 0.0 0.0 2380 1600 ? Ss 16:09 0:00 /bin/sh
root 106 0.0 0.0 2380 696 ? Ss 16:09 0:00 /bin/sh
vscode 158 0.0 0.0 2380 696 ? Ss 16:09 0:00 /bin/sh
vscode 195 0.0 0.6 779316 51048 ? Sl 16:09 0:00 /home/vscode/.vscode-server/bin/94e8ae2b28cb5cc932b86e1070569c4463565c37/node /tm
p/vscode-remote-containers-server-9be10421-3ee5-49b0-a59b-e6bcd60476f8.js
vscode 222 0.0 0.0 2380 696 ? Ss 16:09 0:00 sh /home/vscode/.vscode-server/bin/94e8ae2b28cb5cc932b86e1070569c4463565c37/bin/c
ode-server --log debug --force-disable-user-env --server-data-dir /home/vscode/.vscode-server --use-host-proxy --telemetry-level all --accept-serv
er-license-terms --host 127.0.0.1 --port 0 --connection-token-file /home/vscode/.vscode-server/data/Machine/.connection-token-94e8ae2b28cb5cc932b8
6e1070569c4463565c37 --extensions-download-dir /home/vscode/.vscode-server/extensionsCache --start-server --disable-websocket-compression --skip-r
equirements-check
vscode 233 0.2 1.6 11583496 135436 ? Sl 16:09 0:12 /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4463565c37/no
de /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4463565c37/out/server-main.js --log debug --force-disable-user-env --server
-data-dir /home/vscode/.vscode-server --use-host-proxy --telemetry-level all --accept-server-license-terms --host 127.0.0.1 --port 0 --connection-
token-file /home/vscode/.vscode-server/data/Machine/.connection-token-94e8ae2b28cb5cc932b86e1070569c4463565c37 --extensions-download-dir /home/vsc
ode/.vscode-server/extensionsCache --start-server --disable-websocket-compression --skip-requirements-check
vscode 265 0.0 0.8 764324 71736 ? Ssl 16:09 0:02 /home/vscode/.vscode-server/bin/94e8ae2b28cb5cc932b86e1070569c4463565c37/node -e
????const net = require('net'); ????const fs = require('fs'); ????process.stdin.pause(); ????const client = net.createConnection({ host: '127.0.0
.1', port: 35253 }, () => { ?????console.error('Connection established'); ?????client.pipe(process.stdout); ?????process.stdin.pipe(client); ????}
); ????client.on('close', function (hadError) { ?????console.error(hadError ? 'Remote close with error' : 'Remote close'); ?????process.exit(hadEr
ror ? 1 : 0); ????}); ????client.on('error', function (err) { ?????process.stderr.write(err && (err.stack || err.message) || String(err)); ????});
????process.stdin.on('close', function (hadError) { ?????console.error(hadError ? 'Remote stdin close with error' : 'Remote stdin close'); ?????p
rocess.exit(hadError ? 1 : 0); ????}); ????process.on('uncaughtException', function (err) { ?????fs.writeSync(process.stderr.fd, `Uncaught Excepti
on: ${String(err && (err.stack || err.message) || err)}\n`); ????}); ???
vscode 282 0.1 0.7 753972 60328 ? Ssl 16:09 0:06 /home/vscode/.vscode-server/bin/94e8ae2b28cb5cc932b86e1070569c4463565c37/node -e
????const net = require('net'); ????const fs = require('fs'); ????process.stdin.pause(); ????const client = net.createConnection({ host: '127.0.0
.1', port: 35253 }, () => { ?????console.error('Connection established'); ?????client.pipe(process.stdout); ?????process.stdin.pipe(client); ????}
); ????client.on('close', function (hadError) { ?????console.error(hadError ? 'Remote close with error' : 'Remote close'); ?????process.exit(hadEr
ror ? 1 : 0); ????}); ????client.on('error', function (err) { ?????process.stderr.write(err && (err.stack || err.message) || String(err)); ????});
????process.stdin.on('close', function (hadError) { ?????console.error(hadError ? 'Remote stdin close with error' : 'Remote stdin close'); ?????p
rocess.exit(hadError ? 1 : 0); ????}); ????process.on('uncaughtException', function (err) { ?????fs.writeSync(process.stderr.fd, `Uncaught Excepti
on: ${String(err && (err.stack || err.message) || err)}\n`); ????}); ???
vscode 298 0.5 1.6 1002612 131492 ? Sl 16:09 0:25 /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4463565c37/no
de /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4463565c37/out/bootstrap-fork --type=fileWatcher
vscode 323 3.0 5.3 33233104 437368 ? Sl 16:09 2:15 /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4463565c37/no
de --dns-result-order=ipv4first /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4463565c37/out/bootstrap-fork --type=extension
Host --transformURIs --useHostProxy=true
vscode 378 0.0 0.8 759216 72156 ? Sl 16:09 0:03 /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4463565c37/no
de /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4463565c37/extensions/json-language-features/server/dist/node/jsonServerMai
n --node-ipc --clientProcessId=323
vscode 1559 7.2 26.8 3929832 2185816 ? Sl 16:09 5:19 /usr/bin/sourcekit-lsp
vscode 1734 0.0 1.0 805292 83880 ? Sl 16:09 0:03 /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4463565c37/no
de /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4463565c37/out/bootstrap-fork --type=ptyHost --logsPath /home/vscode/.vscod
e-server/data/logs/20260114T160905
vscode 9091 0.0 0.0 2380 696 ? S 16:20 0:00 /bin/sh -c echo '{}' > /tmp/vscodemkfifo-1768407582141
vscode 9227 0.0 0.0 2380 696 ? S 16:20 0:00 /bin/sh -c echo '{}' > /tmp/vscodemkfifo-1768407623405
vscode 44372 0.0 0.0 8500 5352 pts/0 Ss 17:16 0:00 /bin/bash --init-file /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86
e1070569c4463565c37/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh
vscode 44548 0.5 6.9 1858932 562584 ? Sl 17:16 0:02 /usr/bin/lldb-dap
vscode 44559 0.0 0.5 175376 46720 ? S 17:16 0:00 /usr/bin/lldb-server gdbserver --fd=11 --native-regs --setsid
vscode 44595 0.0 0.4 860584 32880 ? tl 17:16 0:00 /workspaces/hummingbird-websocket/.build/aarch64-unknown-linux-gnu/debug/hummingb
ird-websocketPackageTests.xctest --testing-library swift-testing --enable-swift-testing --experimental-event-stream-version 0 --event-stream-outpu
t-path /tmp/vscodemkfifo-1768411003837 --experimental-attachments-path /workspaces/hummingbird-websocket/.build/attachments/2026-01-14_17-16-43 --
filter HummingbirdWebSocketTests\.HummingbirdWebSocketTests\/testAutoPing\(\)
vscode 44882 0.0 0.0 8500 5288 pts/2 Ss+ 17:17 0:00 /bin/bash --init-file /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86
e1070569c4463565c37/out/vs/workbench/contrib/terminal/common/scripts/shellIntegration-bash.sh
vscode 45870 0.0 0.0 2380 876 ? S 17:23 0:00 /bin/sh -c "/vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c4
463565c37/out/vs/base/node/cpuUsage.sh" 44372
vscode 45871 0.0 0.0 4032 2768 ? S 17:23 0:00 /bin/bash /vscode/vscode-server/bin/linux-arm64/94e8ae2b28cb5cc932b86e1070569c446
3565c37/out/vs/base/node/cpuUsage.sh 44372
root 45873 0.0 0.0 2268 764 ? S 17:23 0:00 sleep 1
vscode 45875 0.0 0.0 2268 764 ? S 17:23 0:00 sleep 1
vscode 45877 1.9 0.0 7180 3496 pts/0 S+ 17:23 0:00 /bin/bash .build/checkouts/swift-nio/scripts/nio-diagnose -o nio-diagnose.md 4459
5
vscode 45908 0.0 0.0 10728 4120 pts/0 R+ 17:23 0:00 ps auxw
vscode 45909 0.0 0.0 7180 1984 pts/0 S+ 17:23 0:00 /bin/bash .build/checkouts/swift-nio/scripts/nio-diagnose -o nio-diagnose.md 4459
5
vscode 45910 0.0 0.0 5400 776 pts/0 S+ 17:23 0:00 cat
ulimits
Command: ulimit -a
real-time non-blocking time (microseconds, -R) unlimited
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31349
max locked memory (kbytes, -l) 82000
max memory size (kbytes, -m) unlimited
open files (-n) 1048576
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Analysing pid 44595
Open file descriptors (pid 44595)
Command: lsof -Pnp 44595
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
hummingbi 44595 vscode cwd DIR 0,139 768 11496500 /workspaces/hummingbird-websocket
hummingbi 44595 vscode rtd DIR 0,140 4096 4596972 /
hummingbi 44595 vscode txt REG 0,139 97581160 210882433 /workspaces/hummingbird-websocket/.build/aarch64-unknown-linux-gnu/debug/hummingb
ird-websocketPackageTests.xctest
hummingbi 44595 vscode mem REG 254,1 1626708 /usr/lib/swift/linux/lib_FoundationICU.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 4589025 /usr/lib/aarch64-linux-gnu/libc.so.6 (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1905619 /usr/lib/aarch64-linux-gnu/libgcc_s.so.1 (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1905707 /usr/lib/aarch64-linux-gnu/libz.so.1.3 (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1905687 /usr/lib/aarch64-linux-gnu/libstdc++.so.6.0.33 (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 4589031 /usr/lib/aarch64-linux-gnu/libm.so.6 (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1626707 /usr/lib/swift/linux/libXCTest.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1626706 /usr/lib/swift/linux/libTesting.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1626703 /usr/lib/swift/linux/libFoundationInternationalization.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1626702 /usr/lib/swift/linux/libFoundationEssentials.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1626701 /usr/lib/swift/linux/libFoundation.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1626798 /usr/lib/swift/linux/libswiftDispatch.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1626715 /usr/lib/swift/linux/libdispatch.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1626700 /usr/lib/swift/linux/libBlocksRuntime.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1627096 /usr/lib/swift/linux/libswiftGlibc.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1627176 /usr/lib/swift/linux/libswiftSynchronization.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1627212 /usr/lib/swift/linux/libswift_RegexParser.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1627216 /usr/lib/swift/linux/libswift_StringProcessing.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1627192 /usr/lib/swift/linux/libswift_Concurrency.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1626736 /usr/lib/swift/linux/libswiftCore.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1627164 /usr/lib/swift/linux/libswiftSwiftOnoneSupport.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 1626711 /usr/lib/swift/linux/lib_Testing_Foundation.so (path dev=0,140)
hummingbi 44595 vscode mem REG 254,1 4589019 /usr/lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 (path dev=0,140)
hummingbi 44595 vscode 0r CHR 136,1 0t0 4 /dev/pts/1
hummingbi 44595 vscode 1w CHR 136,1 0t0 4 /dev/pts/1
hummingbi 44595 vscode 2w CHR 136,1 0t0 4 /dev/pts/1
hummingbi 44595 vscode 3u a_inode 0,13 0 12669 [eventpoll:4,5,19,20,26]
hummingbi 44595 vscode 4u a_inode 0,13 0 12669 [eventfd:10]
hummingbi 44595 vscode 5u a_inode 0,13 0 12669 [timerfd]
hummingbi 44595 vscode 6w FIFO 0,140 0t0 4598104 /tmp/vscodemkfifo-1768411003837
hummingbi 44595 vscode 7u a_inode 0,13 0 12669 [eventpoll:8,9,23]
hummingbi 44595 vscode 8u a_inode 0,13 0 12669 [eventfd:30]
hummingbi 44595 vscode 9u a_inode 0,13 0 12669 [timerfd]
hummingbi 44595 vscode 10u a_inode 0,13 0 12669 [eventpoll:11,12,21,24]
hummingbi 44595 vscode 11u a_inode 0,13 0 12669 [eventfd:31]
hummingbi 44595 vscode 12u a_inode 0,13 0 12669 [timerfd]
hummingbi 44595 vscode 13u a_inode 0,13 0 12669 [eventpoll:14,15]
hummingbi 44595 vscode 14u a_inode 0,13 0 12669 [eventfd:32]
hummingbi 44595 vscode 15u a_inode 0,13 0 12669 [timerfd]
hummingbi 44595 vscode 16u a_inode 0,13 0 12669 [eventpoll:17,18,22]
hummingbi 44595 vscode 17u a_inode 0,13 0 12669 [eventfd:33]
hummingbi 44595 vscode 18u a_inode 0,13 0 12669 [timerfd]
hummingbi 44595 vscode 19u a_inode 0,13 0 12669 [signalfd]
hummingbi 44595 vscode 20u a_inode 0,13 0 12669 [signalfd]
hummingbi 44595 vscode 21u IPv4 1400567 0t0 TCP 127.0.0.1:35815 (LISTEN)
hummingbi 44595 vscode 22u IPv4 1403027 0t0 TCP 127.0.0.1:41256->127.0.0.1:35815 (ESTABLISHED)
hummingbi 44595 vscode 23u sock 0,8 0t0 1402199 protocol: TCP
hummingbi 44595 vscode 24u IPv4 1400568 0t0 TCP 127.0.0.1:35815->127.0.0.1:41256 (ESTABLISHED)
hummingbi 44595 vscode 26u a_inode 0,13 0 12669 [timerfd]
Command: ls -la /proc/44595/fd
total 0
dr-x------ 2 vscode vscode 0 Jan 14 17:16 .
dr-xr-xr-x 9 vscode vscode 0 Jan 14 17:16 ..
lr-x------ 1 vscode vscode 64 Jan 14 17:16 0 -> /dev/pts/1
l-wx------ 1 vscode vscode 64 Jan 14 17:16 1 -> /dev/pts/1
lrwx------ 1 vscode vscode 64 Jan 14 17:16 10 -> anon_inode:[eventpoll]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 11 -> anon_inode:[eventfd]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 12 -> anon_inode:[timerfd]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 13 -> anon_inode:[eventpoll]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 14 -> anon_inode:[eventfd]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 15 -> anon_inode:[timerfd]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 16 -> anon_inode:[eventpoll]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 17 -> anon_inode:[eventfd]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 18 -> anon_inode:[timerfd]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 19 -> anon_inode:[signalfd]
l-wx------ 1 vscode vscode 64 Jan 14 17:16 2 -> /dev/pts/1
lrwx------ 1 vscode vscode 64 Jan 14 17:16 20 -> anon_inode:[signalfd]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 21 -> socket:[1400567]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 22 -> socket:[1403027]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 23 -> socket:[1402199]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 24 -> socket:[1400568]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 26 -> anon_inode:[timerfd]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 3 -> anon_inode:[eventpoll]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 4 -> anon_inode:[eventfd]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 5 -> anon_inode:[timerfd]
l-wx------ 1 vscode vscode 64 Jan 14 17:16 6 -> /tmp/vscodemkfifo-1768411003837
lrwx------ 1 vscode vscode 64 Jan 14 17:16 7 -> anon_inode:[eventpoll]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 8 -> anon_inode:[eventfd]
lrwx------ 1 vscode vscode 64 Jan 14 17:16 9 -> anon_inode:[timerfd]
Eventing fds state (pid 44595)
Command: composite_command_ls_epoll 44595
epoll fd 10
===========
pos: 0
flags: 02
mnt_id: 14
ino: 12669
tfd: 11 events: 19 data: ffffffff0000000b pos:0 ino:317d sdev:d
tfd: 12 events: 2019 data: ffffffff0000000c pos:0 ino:317d sdev:d
tfd: 24 events: 2019 data: 18 pos:0 ino:155ef8 sdev:8
tfd: 21 events: 2019 data: ffffffff00000015 pos:0 ino:155ef7 sdev:8
epoll fd 13
===========
pos: 0
flags: 02
mnt_id: 14
ino: 12669
tfd: 14 events: 19 data: ffffffff0000000e pos:0 ino:317d sdev:d
tfd: 15 events: 2019 data: ffffffff0000000f pos:0 ino:317d sdev:d
epoll fd 16
===========
pos: 0
flags: 02
mnt_id: 14
ino: 12669
tfd: 18 events: 2019 data: ffffffff00000012 pos:0 ino:317d sdev:d
tfd: 17 events: 19 data: ffffffff00000011 pos:0 ino:317d sdev:d
tfd: 22 events: 2019 data: ffffffff00000016 pos:0 ino:156893 sdev:8
epoll fd 3
===========
pos: 0
flags: 02000002
mnt_id: 14
ino: 12669
tfd: 26 events: 40000000 data: 4 pos:0 ino:317d sdev:d
tfd: 4 events: 4019 data: 1 pos:0 ino:317d sdev:d
tfd: 20 events: 4019 data: ffffc0000bb0 pos:0 ino:317d sdev:d
tfd: 19 events: 4019 data: ffffc0000b70 pos:0 ino:317d sdev:d
tfd: 5 events: 40000019 data: 3 pos:0 ino:317d sdev:d
epoll fd 7
===========
pos: 0
flags: 02
mnt_id: 14
ino: 12669
tfd: 8 events: 19 data: ffffffff00000008 pos:0 ino:317d sdev:d
tfd: 9 events: 2019 data: ffffffff00000009 pos:0 ino:317d sdev:d
tfd: 23 events: 18 data: ffffffff00000017 pos:0 ino:156557 sdev:8
Thread names
Command: grep -H ^ /proc/44595/task/44595/comm /proc/44595/task/44607/comm /proc/44595/task/44608/comm /proc/44595/task/44609/comm /proc/44595/ta sk/44610/comm /proc/44595/task/44611/comm /proc/44595/task/44612/comm /proc/44595/task/44613/comm /proc/44595/task/44614/comm /proc/44595/task/446 15/comm
/proc/44595/task/44595/comm:hummingbird-web
/proc/44595/task/44607/comm:hummingbird-web
/proc/44595/task/44608/comm:hummingbird-web
/proc/44595/task/44609/comm:hummingbird-web
/proc/44595/task/44610/comm:hummingbird-web
/proc/44595/task/44611/comm:hummingbird-web
/proc/44595/task/44612/comm:NIO-SGLTN-1-#1
/proc/44595/task/44613/comm:NIO-SGLTN-1-#2
/proc/44595/task/44614/comm:NIO-SGLTN-1-#3
/proc/44595/task/44615/comm:NIO-SGLTN-1-#4
Syscalls by thread
Command: grep -H ^ /proc/44595/task/44595/syscall /proc/44595/task/44607/syscall /proc/44595/task/44608/syscall /proc/44595/task/44609/syscall /p roc/44595/task/44610/syscall /proc/44595/task/44611/syscall /proc/44595/task/44612/syscall /proc/44595/task/44613/syscall /proc/44595/task/44614/s yscall /proc/44595/task/44615/syscall
grep: /proc/44595/task/44595/syscall: Operation not permitted
grep: /proc/44595/task/44607/syscall: Operation not permitted
grep: /proc/44595/task/44608/syscall: Operation not permitted
grep: /proc/44595/task/44609/syscall: Operation not permitted
grep: /proc/44595/task/44610/syscall: Operation not permitted
grep: /proc/44595/task/44611/syscall: Operation not permitted
grep: /proc/44595/task/44612/syscall: Operation not permitted
grep: /proc/44595/task/44613/syscall: Operation not permitted
grep: /proc/44595/task/44614/syscall: Operation not permitted
grep: /proc/44595/task/44615/syscall: Operation not permitted