… | |
… | |
65 | } |
65 | } |
66 | } |
66 | } |
67 | |
67 | |
68 | our (@FD_INUSE, $FD_I); |
68 | our (@FD_INUSE, $FD_I); |
69 | our $FD_CHECK_W = AE::timer 4, 4, sub { |
69 | our $FD_CHECK_W = AE::timer 4, 4, sub { |
70 | my $cnt = (@FD_INUSE < 100 * 10 ? int @FD_INUSE * 0.1 : 100) || 1; |
70 | my $cnt = (@FD_INUSE < 100 * 10 ? int @FD_INUSE * 0.1 : 100) || 10; |
71 | |
71 | |
72 | if ($FD_I <= 0) { |
72 | if ($FD_I <= 0) { |
73 | #pop @FD_INUSE while @FD_INUSE && !$FD_INUSE[-1]; |
73 | #pop @FD_INUSE while @FD_INUSE && !$FD_INUSE[-1]; |
74 | ($FD_I = @FD_INUSE) >= 0 |
74 | ($FD_I = @FD_INUSE) >= 0 |
75 | or return; # empty |
75 | or return; # empty |
76 | } |
76 | } |
77 | |
77 | |
78 | $cnt = $FD_I + 1 if $cnt > $FD_I; |
78 | $cnt = $FD_I if $cnt > $FD_I; |
79 | |
79 | |
80 | eval { |
80 | eval { |
81 | do { |
81 | do { |
82 | !$FD_INUSE[--$FD_I] |
82 | !$FD_INUSE[--$FD_I] |
83 | or (POSIX::lseek $FD_I, 0, 1) != -1 |
83 | or (POSIX::lseek $FD_I, 0, 1) != -1 |