diff --git a/sunshine/platform/linux/input.cpp b/sunshine/platform/linux/input.cpp index fbdc8133..be923936 100644 --- a/sunshine/platform/linux/input.cpp +++ b/sunshine/platform/linux/input.cpp @@ -696,13 +696,13 @@ public: }; inline void rumbleIterate(std::vector &effects, std::vector &polls, std::chrono::milliseconds to) { - std::vector polls_tmp; - polls_tmp.reserve(polls.size()); + std::vector polls_recv; + polls_recv.reserve(polls.size()); for(auto &poll : polls) { - polls_tmp.emplace_back(poll.el); + polls_recv.emplace_back(poll.el); } - auto res = poll(polls_tmp.data(), polls.size(), to.count()); + auto res = poll(polls_recv.data(), polls_recv.size(), to.count()); // If timed out if(!res) { @@ -725,16 +725,17 @@ inline void rumbleIterate(std::vector &effects, std::vector // TUPLE_2D_REF(dev, q, *dev_q_it); // on error - if((*poll)->revents & (POLLHUP | POLLRDHUP | POLLERR)) { + if(polls_recv[x].revents & (POLLHUP | POLLRDHUP | POLLERR)) { BOOST_LOG(warning) << "Gamepad ["sv << x << "] file discriptor closed unexpectedly"sv; polls.erase(poll); effects.erase(effect_it); + --x; continue; } - if(!((*poll)->revents & POLLIN)) { + if(!(polls_recv[x].revents & POLLIN)) { continue; } @@ -751,6 +752,7 @@ inline void rumbleIterate(std::vector &effects, std::vector polls.erase(poll); effects.erase(effect_it); + --x; continue; }