Browse Source

Linux: Use list instead of vector for file descriptor callback storage in internal message queue to fix issues when recursively adding or removing callbacks

tags/2021-05-28
ed 5 years ago
parent
commit
c47c790f79
2 changed files with 3 additions and 5 deletions
  1. +1
    -0
      modules/juce_core/system/juce_StandardHeader.h
  2. +2
    -5
      modules/juce_events/native/juce_linux_Messaging.cpp

+ 1
- 0
modules/juce_core/system/juce_StandardHeader.h View File

@@ -59,6 +59,7 @@
#include <mutex>
#include <condition_variable>
#include <queue>
#include <list>
//==============================================================================
#include "juce_CompilerSupport.h"


+ 2
- 5
modules/juce_events/native/juce_linux_Messaging.cpp View File

@@ -112,10 +112,7 @@ JUCE_IMPLEMENT_SINGLETON (InternalMessageQueue)
struct InternalRunLoop
{
public:
InternalRunLoop()
{
fdReadCallbacks.reserve (8);
}
InternalRunLoop() = default;
void registerFdCallback (int fd, std::function<void(int)>&& cb, short eventMask)
{
@@ -186,7 +183,7 @@ public:
private:
CriticalSection lock;
std::vector<std::pair<int, std::function<void(int)>>> fdReadCallbacks;
std::list<std::pair<int, std::function<void(int)>>> fdReadCallbacks;
std::vector<pollfd> pfds;
};


Loading…
Cancel
Save