|
8 | 8 | namespace Alsa {
|
9 | 9 |
|
10 | 10 | std::span<pollfd>
|
11 |
| -NonBlock::CopyReturnedEvents(MultiSocketMonitor &m, std::size_t n) noexcept |
| 11 | +NonBlock::CopyReturnedEvents(MultiSocketMonitor &m) noexcept |
12 | 12 | {
|
13 |
| - const auto pfds = buffer.Get(n), end = pfds + n; |
14 |
| - |
15 |
| - auto *i = pfds; |
16 |
| - m.ForEachReturnedEvent([&i, end](SocketDescriptor s, unsigned events){ |
17 |
| - if (i >= end) |
18 |
| - return; |
19 |
| - |
20 |
| - i->fd = s.Get(); |
21 |
| - i->events = i->revents = events; |
22 |
| - ++i; |
| 13 | + const std::span<pollfd> pfds = buffer; |
| 14 | + |
| 15 | + for (auto &i : pfds) |
| 16 | + i.revents = 0; |
| 17 | + |
| 18 | + m.ForEachReturnedEvent([pfds](SocketDescriptor s, unsigned events){ |
| 19 | + for (auto &i : pfds) { |
| 20 | + if (i.fd == s.Get()) { |
| 21 | + i.revents = events; |
| 22 | + return; |
| 23 | + } |
| 24 | + } |
23 | 25 | });
|
24 | 26 |
|
25 |
| - return {pfds, static_cast<std::size_t>(i - pfds)}; |
| 27 | + return pfds; |
26 | 28 |
|
27 | 29 | }
|
28 | 30 |
|
@@ -54,11 +56,7 @@ NonBlockPcm::PrepareSockets(MultiSocketMonitor &m, snd_pcm_t *pcm)
|
54 | 56 | void
|
55 | 57 | NonBlockPcm::DispatchSockets(MultiSocketMonitor &m, snd_pcm_t *pcm)
|
56 | 58 | {
|
57 |
| - int count = snd_pcm_poll_descriptors_count(pcm); |
58 |
| - if (count <= 0) |
59 |
| - return; |
60 |
| - |
61 |
| - const auto pfds = base.CopyReturnedEvents(m, count); |
| 59 | + const auto pfds = base.CopyReturnedEvents(m); |
62 | 60 |
|
63 | 61 | unsigned short dummy;
|
64 | 62 | int err = snd_pcm_poll_descriptors_revents(pcm, pfds.data(), pfds.size(), &dummy);
|
@@ -88,11 +86,7 @@ NonBlockMixer::PrepareSockets(MultiSocketMonitor &m, snd_mixer_t *mixer) noexcep
|
88 | 86 | void
|
89 | 87 | NonBlockMixer::DispatchSockets(MultiSocketMonitor &m, snd_mixer_t *mixer) noexcept
|
90 | 88 | {
|
91 |
| - int count = snd_mixer_poll_descriptors_count(mixer); |
92 |
| - if (count <= 0) |
93 |
| - return; |
94 |
| - |
95 |
| - const auto pfds = base.CopyReturnedEvents(m, count); |
| 89 | + const auto pfds = base.CopyReturnedEvents(m); |
96 | 90 |
|
97 | 91 | unsigned short dummy;
|
98 | 92 | snd_mixer_poll_descriptors_revents(mixer, pfds.data(), pfds.size(), &dummy);
|
|
0 commit comments