-
Notifications
You must be signed in to change notification settings - Fork 13.7k
Commit ab97e9c
committed
Ensure non-empty buffers for large vectored I/O
`readv` and `writev` are constrained by a platform-specific upper bound
on the number of buffers which can be passed. Currently, `read_vectored`
and `write_vectored` implementations simply truncate to this limit when
larger. However, when the only non-empty buffers are at indices above
this limit, they will erroneously return `Ok(0)`.
Instead, slice the buffers starting at the first non-empty buffer. This
trades a conditional move for a branch, so it's barely a penalty in the
common case.
The new method `limit_slices` on `IoSlice` and `IoSliceMut` may be
generally useful to users like `advance_slices` is, but I have left it
as `pub(crate)` for now.1 parent 0c478fd commit ab97e9c
5 files changed
+112
-41
lines changedLines changed: 39 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
297 | 297 |
| |
298 | 298 |
| |
299 | 299 |
| |
300 | + | ||
300 | 301 |
| |
301 | 302 |
| |
302 | 303 |
| |
| |||
1388 | 1389 |
| |
1389 | 1390 |
| |
1390 | 1391 |
| |
1392 | + | ||
1393 | + | ||
1394 | + | ||
1395 | + | ||
1396 | + | ||
1397 | + | ||
1398 | + | ||
1399 | + | ||
1400 | + | ||
1401 | + | ||
1402 | + | ||
1403 | + | ||
1404 | + | ||
1405 | + | ||
1406 | + | ||
1407 | + | ||
1408 | + | ||
1409 | + | ||
1410 | + | ||
1391 | 1411 |
| |
1392 | 1412 |
| |
1393 | 1413 |
| |
| |||
1549 | 1569 |
| |
1550 | 1570 |
| |
1551 | 1571 |
| |
1572 | + | ||
1573 | + | ||
1574 | + | ||
1575 | + | ||
1576 | + | ||
1577 | + | ||
1578 | + | ||
1579 | + | ||
1580 | + | ||
1581 | + | ||
1582 | + | ||
1583 | + | ||
1584 | + | ||
1585 | + | ||
1586 | + | ||
1587 | + | ||
1588 | + | ||
1589 | + | ||
1590 | + | ||
1552 | 1591 |
| |
1553 | 1592 |
| |
1554 | 1593 |
| |
|
Lines changed: 6 additions & 5 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1 | 1 |
| |
2 | 2 |
| |
3 | - | ||
4 | 3 |
| |
5 | 4 |
| |
6 | 5 |
| |
| |||
38 | 37 |
| |
39 | 38 |
| |
40 | 39 |
| |
41 | - | ||
40 | + | ||
41 | + | ||
42 | 42 |
| |
43 | 43 |
| |
44 | 44 |
| |
45 | 45 |
| |
46 | - | ||
46 | + | ||
47 | 47 |
| |
48 | 48 |
| |
49 | 49 |
| |
| |||
65 | 65 |
| |
66 | 66 |
| |
67 | 67 |
| |
68 | - | ||
68 | + | ||
69 | + | ||
69 | 70 |
| |
70 | 71 |
| |
71 | 72 |
| |
72 | 73 |
| |
73 | - | ||
74 | + | ||
74 | 75 |
| |
75 | 76 |
| |
76 | 77 |
| |
|
Lines changed: 46 additions & 20 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
108 | 108 |
| |
109 | 109 |
| |
110 | 110 |
| |
111 | - | ||
111 | + | ||
112 | + | ||
112 | 113 |
| |
113 | 114 |
| |
114 | 115 |
| |
115 | 116 |
| |
116 | - | ||
117 | + | ||
117 | 118 |
| |
118 | 119 |
| |
119 | 120 |
| |
| |||
198 | 199 |
| |
199 | 200 |
| |
200 | 201 |
| |
201 | - | ||
202 | + | ||
203 | + | ||
204 | + | ||
205 | + | ||
206 | + | ||
207 | + | ||
202 | 208 |
| |
203 | 209 |
| |
204 | 210 |
| |
205 | 211 |
| |
206 | - | ||
212 | + | ||
207 | 213 |
| |
208 | 214 |
| |
209 | 215 |
| |
| |||
235 | 241 |
| |
236 | 242 |
| |
237 | 243 |
| |
238 | - | ||
244 | + | ||
245 | + | ||
246 | + | ||
247 | + | ||
248 | + | ||
239 | 249 |
| |
240 | 250 |
| |
241 | 251 |
| |
| |||
245 | 255 |
| |
246 | 256 |
| |
247 | 257 |
| |
258 | + | ||
248 | 259 |
| |
249 | 260 |
| |
250 | 261 |
| |
251 | 262 |
| |
252 | - | ||
263 | + | ||
253 | 264 |
| |
254 | 265 |
| |
255 | 266 |
| |
| |||
260 | 271 |
| |
261 | 272 |
| |
262 | 273 |
| |
263 | - | ||
274 | + | ||
275 | + | ||
276 | + | ||
277 | + | ||
278 | + | ||
264 | 279 |
| |
265 | 280 |
| |
266 | 281 |
| |
| |||
272 | 287 |
| |
273 | 288 |
| |
274 | 289 |
| |
290 | + | ||
275 | 291 |
| |
276 | 292 |
| |
277 | 293 |
| |
278 | 294 |
| |
279 | - | ||
295 | + | ||
280 | 296 |
| |
281 | 297 |
| |
282 | 298 |
| |
| |||
296 | 312 |
| |
297 | 313 |
| |
298 | 314 |
| |
299 | - | ||
315 | + | ||
316 | + | ||
317 | + | ||
318 | + | ||
319 | + | ||
300 | 320 |
| |
301 | 321 |
| |
302 | 322 |
| |
| |||
308 | 328 |
| |
309 | 329 |
| |
310 | 330 |
| |
331 | + | ||
311 | 332 |
| |
312 | 333 |
| |
313 | 334 |
| |
314 | 335 |
| |
315 | - | ||
336 | + | ||
316 | 337 |
| |
317 | 338 |
| |
318 | 339 |
| |
| |||
339 | 360 |
| |
340 | 361 |
| |
341 | 362 |
| |
342 | - | ||
363 | + | ||
364 | + | ||
343 | 365 |
| |
344 | 366 |
| |
345 | 367 |
| |
346 | 368 |
| |
347 | - | ||
369 | + | ||
348 | 370 |
| |
349 | 371 |
| |
350 | 372 |
| |
| |||
408 | 430 |
| |
409 | 431 |
| |
410 | 432 |
| |
411 | - | ||
433 | + | ||
434 | + | ||
412 | 435 |
| |
413 | 436 |
| |
414 | 437 |
| |
415 | 438 |
| |
416 | - | ||
439 | + | ||
417 | 440 |
| |
418 | 441 |
| |
419 | 442 |
| |
| |||
445 | 468 |
| |
446 | 469 |
| |
447 | 470 |
| |
448 | - | ||
471 | + | ||
449 | 472 |
| |
450 | 473 |
| |
451 | 474 |
| |
| |||
455 | 478 |
| |
456 | 479 |
| |
457 | 480 |
| |
481 | + | ||
458 | 482 |
| |
459 | 483 |
| |
460 | 484 |
| |
461 | 485 |
| |
462 | - | ||
486 | + | ||
463 | 487 |
| |
464 | 488 |
| |
465 | 489 |
| |
466 | 490 |
| |
467 | 491 |
| |
468 | 492 |
| |
469 | 493 |
| |
470 | - | ||
494 | + | ||
471 | 495 |
| |
472 | 496 |
| |
473 | 497 |
| |
| |||
479 | 503 |
| |
480 | 504 |
| |
481 | 505 |
| |
506 | + | ||
482 | 507 |
| |
483 | 508 |
| |
484 | 509 |
| |
485 | 510 |
| |
486 | - | ||
511 | + | ||
487 | 512 |
| |
488 | 513 |
| |
489 | 514 |
| |
| |||
503 | 528 |
| |
504 | 529 |
| |
505 | 530 |
| |
506 | - | ||
531 | + | ||
507 | 532 |
| |
508 | 533 |
| |
509 | 534 |
| |
| |||
515 | 540 |
| |
516 | 541 |
| |
517 | 542 |
| |
543 | + | ||
518 | 544 |
| |
519 | 545 |
| |
520 | 546 |
| |
521 | 547 |
| |
522 | - | ||
548 | + | ||
523 | 549 |
| |
524 | 550 |
| |
525 | 551 |
| |
|
Lines changed: 14 additions & 3 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1 | 1 |
| |
2 | 2 |
| |
3 | - | ||
3 | + | ||
4 | 4 |
| |
5 | 5 |
| |
6 | 6 |
| |
7 | 7 |
| |
8 | 8 |
| |
9 | + | ||
10 | + | ||
9 | 11 |
| |
10 | - | ||
11 | - | ||
12 | + | ||
13 | + | ||
14 | + | ||
15 | + | ||
16 | + | ||
17 | + | ||
18 | + | ||
19 | + | ||
20 | + | ||
21 | + | ||
22 | + | ||
12 | 23 |
|
Lines changed: 7 additions & 13 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
9 | 9 |
| |
10 | 10 |
| |
11 | 11 |
| |
12 | - | ||
12 | + | ||
13 | 13 |
| |
14 | 14 |
| |
15 | 15 |
| |
| |||
222 | 222 |
| |
223 | 223 |
| |
224 | 224 |
| |
225 | - | ||
225 | + | ||
226 | + | ||
226 | 227 |
| |
227 | - | ||
228 | - | ||
229 | - | ||
230 | - | ||
231 | - | ||
228 | + | ||
232 | 229 |
| |
233 | 230 |
| |
234 | 231 |
| |
| |||
267 | 264 |
| |
268 | 265 |
| |
269 | 266 |
| |
270 | - | ||
267 | + | ||
268 | + | ||
271 | 269 |
| |
272 | - | ||
273 | - | ||
274 | - | ||
275 | - | ||
276 | - | ||
270 | + | ||
277 | 271 |
| |
278 | 272 |
| |
279 | 273 |
| |
|
0 commit comments