Merge pull request #87 from HomerSp/fix-rumble-hang

Fix rumble events causing game to freeze
This commit is contained in:
ReenigneArcher
2022-03-13 16:48:43 -04:00
committed by GitHub
+8 -6
View File
@@ -696,13 +696,13 @@ public:
}; };
inline void rumbleIterate(std::vector<effect_t> &effects, std::vector<pollfd_t> &polls, std::chrono::milliseconds to) { inline void rumbleIterate(std::vector<effect_t> &effects, std::vector<pollfd_t> &polls, std::chrono::milliseconds to) {
std::vector<pollfd> polls_tmp; std::vector<pollfd> polls_recv;
polls_tmp.reserve(polls.size()); polls_recv.reserve(polls.size());
for(auto &poll : polls) { 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 timed out
if(!res) { if(!res) {
@@ -725,16 +725,17 @@ inline void rumbleIterate(std::vector<effect_t> &effects, std::vector<pollfd_t>
// TUPLE_2D_REF(dev, q, *dev_q_it); // TUPLE_2D_REF(dev, q, *dev_q_it);
// on error // 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; BOOST_LOG(warning) << "Gamepad ["sv << x << "] file discriptor closed unexpectedly"sv;
polls.erase(poll); polls.erase(poll);
effects.erase(effect_it); effects.erase(effect_it);
--x;
continue; continue;
} }
if(!((*poll)->revents & POLLIN)) { if(!(polls_recv[x].revents & POLLIN)) {
continue; continue;
} }
@@ -751,6 +752,7 @@ inline void rumbleIterate(std::vector<effect_t> &effects, std::vector<pollfd_t>
polls.erase(poll); polls.erase(poll);
effects.erase(effect_it); effects.erase(effect_it);
--x;
continue; continue;
} }