]> granicus.if.org Git - icinga2/commitdiff
Attempt to fix race condition problem with epoll_ctl()
authorGunnar Beutner <gunnar@beutner.name>
Thu, 3 Mar 2016 12:37:16 +0000 (13:37 +0100)
committerMichael Friedrich <michael.friedrich@netways.de>
Tue, 15 Mar 2016 12:14:35 +0000 (13:14 +0100)
refs #11289

lib/base/socketevents.cpp

index 58d0d1d94654dc51d2b6fa194f06fe36e6f2025e..40234e60c8d4c2cb59b5d93d15a0dcc3e4eaf4cd 100644 (file)
@@ -369,13 +369,6 @@ void SocketEvents::ChangeEvents(int events)
 
        int tid = m_ID % SOCKET_IOTHREADS;
 
-#ifdef __linux__
-       epoll_event event;
-       memset(&event, 0, sizeof(event));
-       event.data.fd = m_FD;
-       event.events = PollToEpoll(events);
-       epoll_ctl(l_SocketIOPollFDs[tid], EPOLL_CTL_MOD, m_FD, &event);
-#else /* __linux__ */
        {
                boost::mutex::scoped_lock lock(l_SocketIOMutex[tid]);
 
@@ -384,6 +377,13 @@ void SocketEvents::ChangeEvents(int events)
                if (it == l_SocketIOSockets[tid].end())
                        return;
 
+#ifdef __linux__
+               epoll_event event;
+               memset(&event, 0, sizeof(event));
+               event.data.fd = m_FD;
+               event.events = PollToEpoll(events);
+               epoll_ctl(l_SocketIOPollFDs[tid], EPOLL_CTL_MOD, m_FD, &event);
+#else /* __linux__ */
                if (it->second.Events == events)
                        return;
 
@@ -393,8 +393,10 @@ void SocketEvents::ChangeEvents(int events)
                        m_PFD->events = events;
                else
                        l_SocketIOFDChanged[tid] = true;
+#endif /* __linux__ */
        }
 
+#ifndef __linux__
        WakeUpThread();
 #endif /* __linux__ */
 }