Commit 902b18d
authored
don't deliver events for unregistered fds (#341)
Motivation:
Since forever we had a major bug in the Selector: In this condition:
- kqueue/epoll had many events
- in one of the earlier events we unregister a Channel whose fd is on of
the later events
- we subsequently (still in the same event loop tick) register a new
channel which gets the same fd as the previously closed one
then we would deliver an event that was meant for a previous channel to
a newly opened one.
Thanks to @mcdappdev for hitting this bug, helping us debug it and also
providing a repeatedly working repro.
Modifications:
if during event delivery any fd gets unregistered, we stop delivering
the remaining events and rely on the selector to redeliver them
again next time.
Result:
we don't deliver events for previously closed channels to new ones.1 parent 17a2aae commit 902b18d
File tree
7 files changed
+374
-11
lines changed- Sources/NIO
- Tests/NIOTests
7 files changed
+374
-11
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
37 | 42 | | |
38 | 43 | | |
39 | 44 | | |
| |||
228 | 233 | | |
229 | 234 | | |
230 | 235 | | |
231 | | - | |
232 | | - | |
| 236 | + | |
| 237 | + | |
233 | 238 | | |
234 | 239 | | |
235 | 240 | | |
| |||
619 | 624 | | |
620 | 625 | | |
621 | 626 | | |
622 | | - | |
| 627 | + | |
623 | 628 | | |
624 | 629 | | |
625 | 630 | | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
626 | 636 | | |
627 | 637 | | |
628 | 638 | | |
629 | 639 | | |
630 | 640 | | |
631 | 641 | | |
632 | 642 | | |
633 | | - | |
| 643 | + | |
634 | 644 | | |
635 | 645 | | |
636 | 646 | | |
| |||
776 | 786 | | |
777 | 787 | | |
778 | 788 | | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
779 | 799 | | |
780 | 800 | | |
781 | 801 | | |
| |||
793 | 813 | | |
794 | 814 | | |
795 | 815 | | |
796 | | - | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
797 | 819 | | |
798 | 820 | | |
799 | 821 | | |
| |||
805 | 827 | | |
806 | 828 | | |
807 | 829 | | |
808 | | - | |
| 830 | + | |
809 | 831 | | |
810 | 832 | | |
811 | 833 | | |
| |||
831 | 853 | | |
832 | 854 | | |
833 | 855 | | |
| 856 | + | |
| 857 | + | |
834 | 858 | | |
835 | 859 | | |
836 | 860 | | |
| |||
845 | 869 | | |
846 | 870 | | |
847 | 871 | | |
| 872 | + | |
848 | 873 | | |
849 | | - | |
| 874 | + | |
850 | 875 | | |
851 | 876 | | |
852 | 877 | | |
| |||
885 | 910 | | |
886 | 911 | | |
887 | 912 | | |
888 | | - | |
| 913 | + | |
889 | 914 | | |
890 | 915 | | |
891 | 916 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
259 | 259 | | |
260 | 260 | | |
261 | 261 | | |
| 262 | + | |
| 263 | + | |
262 | 264 | | |
263 | 265 | | |
264 | 266 | | |
| |||
453 | 455 | | |
454 | 456 | | |
455 | 457 | | |
| 458 | + | |
| 459 | + | |
456 | 460 | | |
457 | 461 | | |
458 | 462 | | |
| |||
500 | 504 | | |
501 | 505 | | |
502 | 506 | | |
503 | | - | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
504 | 511 | | |
505 | 512 | | |
506 | 513 | | |
| |||
540 | 547 | | |
541 | 548 | | |
542 | 549 | | |
543 | | - | |
| 550 | + | |
| 551 | + | |
| 552 | + | |
| 553 | + | |
544 | 554 | | |
545 | 555 | | |
546 | 556 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
| 43 | + | |
43 | 44 | | |
44 | 45 | | |
45 | 46 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
779 | 779 | | |
780 | 780 | | |
781 | 781 | | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
| 798 | + | |
| 799 | + | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
| 810 | + | |
| 811 | + | |
| 812 | + | |
| 813 | + | |
| 814 | + | |
| 815 | + | |
| 816 | + | |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
| 824 | + | |
| 825 | + | |
| 826 | + | |
| 827 | + | |
| 828 | + | |
782 | 829 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| 31 | + | |
31 | 32 | | |
32 | 33 | | |
33 | 34 | | |
| |||
0 commit comments