From 37a84c5223279ce16152db69fba204df365c4eda Mon Sep 17 00:00:00 2001 From: underengineering <103371090+underengineering@users.noreply.github.com> Date: Fri, 10 May 2024 14:32:50 +0300 Subject: socket2: fix events being reordered (#5955) * socket2: fix events being reordered * remove WL_EVENT_READABLE * initialize eventSource in SClient * add more logs oopsie * replace unordered_map with vector * fix reordering when socket becomes writable before queue is flushed * ignore EAGAIN when accepting connection * use g_pEventManager --- src/managers/EventManager.hpp | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'src/managers/EventManager.hpp') diff --git a/src/managers/EventManager.hpp b/src/managers/EventManager.hpp index ed681dba..94dbab59 100644 --- a/src/managers/EventManager.hpp +++ b/src/managers/EventManager.hpp @@ -1,10 +1,9 @@ #pragma once #include -#include -#include +#include #include "../defines.hpp" -#include "../helpers/MiscFunctions.hpp" +#include "../helpers/memory/SharedPtr.hpp" struct SHyprIPCEvent { std::string event; @@ -14,27 +13,33 @@ struct SHyprIPCEvent { class CEventManager { public: CEventManager(); + ~CEventManager(); - void postEvent(const SHyprIPCEvent event); + void postEvent(const SHyprIPCEvent& event); - void startThread(); - - std::thread m_tThread; + private: + std::string formatEvent(const SHyprIPCEvent& event) const; - int m_iSocketFD = -1; + static int onServerEvent(int fd, uint32_t mask, void* data); + static int onClientEvent(int fd, uint32_t mask, void* data); - int onSocket2Write(int fd, uint32_t mask); - int onFDWrite(int fd, uint32_t mask); + int onServerEvent(int fd, uint32_t mask); + int onClientEvent(int fd, uint32_t mask); - private: - void flushEvents(); + struct SClient { + int fd = -1; + std::deque> events; + wl_event_source* eventSource = nullptr; + }; - std::mutex eventQueueMutex; - std::deque m_dQueuedEvents; + std::vector::iterator findClientByFD(int fd); + std::vector::iterator removeClientByFD(int fd); - std::deque> m_dAcceptedSocketFDs; + private: + int m_iSocketFD = -1; + wl_event_source* m_pEventSource = nullptr; - wl_event_source* m_pEventSource = nullptr; + std::vector m_vClients; }; inline std::unique_ptr g_pEventManager; -- cgit v1.2.3