Commit 3230490
SocketServer: close _serverFd exactly once (#585)
SocketServer::stop() closed _serverFd but never cleared it, and stop()
runs again from both ~WebSocketServer() and ~SocketServer(), so every
teardown closed the same fd number two or three times. If another
thread opens a descriptor between those closes, the kernel reuses the
number and the stale close destroys it — observed as intermittent
process aborts ("Unexpected error 9 on netlink descriptor", glibc's
getaddrinfo netlink probe) when a DNS lookup raced a server teardown.
Close the fd once and set it to -1, in stop() and in the listen()
error paths.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>1 parent fb21fa2 commit 3230490
1 file changed
Lines changed: 16 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
| 98 | + | |
98 | 99 | | |
99 | 100 | | |
100 | 101 | | |
| |||
113 | 114 | | |
114 | 115 | | |
115 | 116 | | |
| 117 | + | |
116 | 118 | | |
117 | 119 | | |
118 | 120 | | |
| |||
125 | 127 | | |
126 | 128 | | |
127 | 129 | | |
| 130 | + | |
128 | 131 | | |
129 | 132 | | |
130 | 133 | | |
| |||
143 | 146 | | |
144 | 147 | | |
145 | 148 | | |
| 149 | + | |
146 | 150 | | |
147 | 151 | | |
148 | 152 | | |
| |||
155 | 159 | | |
156 | 160 | | |
157 | 161 | | |
| 162 | + | |
158 | 163 | | |
159 | 164 | | |
160 | 165 | | |
| |||
169 | 174 | | |
170 | 175 | | |
171 | 176 | | |
| 177 | + | |
172 | 178 | | |
173 | 179 | | |
174 | 180 | | |
| |||
231 | 237 | | |
232 | 238 | | |
233 | 239 | | |
234 | | - | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
235 | 250 | | |
236 | 251 | | |
237 | 252 | | |
| |||
0 commit comments