]> granicus.if.org Git - icinga2/commitdiff
Cleaned up Socket/Timer code.
authorGunnar Beutner <gunnar.beutner@netways.de>
Thu, 19 Apr 2012 06:46:41 +0000 (08:46 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Thu, 19 Apr 2012 06:46:41 +0000 (08:46 +0200)
base/application.cpp
base/i2-base.h
base/socket.cpp
base/socket.h
base/tcpserver.cpp
base/timer.cpp
base/timer.h
icinga/virtualendpoint.cpp

index ec3970577784b4c7bb294672e40101cf4cdcf5a8..16dba4575097dce17b25f8b65550ccfed840b3b9 100644 (file)
@@ -59,7 +59,7 @@ void Application::RunEventLoop(void)
                FD_ZERO(&writefds);
                FD_ZERO(&exceptfds);
 
-               for (list<Socket::WeakPtr>::iterator i = Socket::Sockets.begin(); i != Socket::Sockets.end(); i++) {
+               for (Socket::CollectionType::iterator i = Socket::Sockets.begin(); i != Socket::Sockets.end(); i++) {
                        Socket::Ptr socket = i->lock();
 
                        if (socket == NULL)
@@ -104,7 +104,7 @@ void Application::RunEventLoop(void)
                EventArgs ea;
                ea.Source = shared_from_this();
 
-               list<Socket::WeakPtr>::iterator prev, i;
+               Socket::CollectionType::iterator prev, i;
                for (i = Socket::Sockets.begin(); i != Socket::Sockets.end(); ) {
                        prev = i;
                        i++;
index c0f586a709657421d3087684bdc9828346d80aa1..a07cbc54e65c22869720e148ab09a196593cbcb1 100644 (file)
@@ -18,6 +18,7 @@
 #include <memory>
 #include <string>
 #include <vector>
+#include <set>
 #include <iostream>
 #include <list>
 #include <typeinfo>
index 394f8380bb258a5709612be1f708414ead4d1a73..4e5a2f00f6000a75b2419becba5102f02640d628 100644 (file)
@@ -2,7 +2,7 @@
 
 using namespace icinga;
 
-list<Socket::WeakPtr> Socket::Sockets;
+Socket::CollectionType Socket::Sockets;
 
 Socket::Socket(void)
 {
@@ -20,12 +20,16 @@ void Socket::Start(void)
 
        OnException += bind_weak(&Socket::ExceptionEventHandler, shared_from_this());
 
-       Sockets.push_front(static_pointer_cast<Socket>(shared_from_this()));
+       Sockets.insert(static_pointer_cast<Socket>(shared_from_this()));
 }
 
 void Socket::Stop(void)
 {
-       Sockets.remove_if(weak_ptr_eq_raw<Socket>(this));
+       Socket::Ptr self = static_pointer_cast<Socket>(shared_from_this());
+       Socket::CollectionType::iterator i = Sockets.find(self);
+
+       if (i != Sockets.end())
+               Sockets.erase(i);
 }
 
 void Socket::SetFD(SOCKET fd)
@@ -112,7 +116,7 @@ int Socket::ExceptionEventHandler(const EventArgs& ea)
 
 void Socket::CloseAllSockets(void)
 {
-       for (list<Socket::WeakPtr>::iterator i = Sockets.begin(); i != Sockets.end(); ) {
+       for (Socket::CollectionType::iterator i = Sockets.begin(); i != Sockets.end(); ) {
                Socket::Ptr socket = i->lock();
 
                i++;
index 90ac7a2668a5920e4ad7722ecc06534acc53a0ff..1e8d4ff2d54e15dc930234aec81de1854745b2c1 100644 (file)
@@ -31,7 +31,9 @@ public:
        typedef shared_ptr<Socket> Ptr;
        typedef weak_ptr<Socket> WeakPtr;
 
-       static list<Socket::WeakPtr> Sockets;
+       typedef set< Socket::WeakPtr, owner_less<Socket::WeakPtr> > CollectionType;
+
+       static Socket::CollectionType Sockets;
 
        ~Socket(void);
 
index a96a2f06f040a2b1f7f18a868f2b3c1292525fe1..b4b7f7b70014f0b3963b7748afa8927c6cfab72d 100644 (file)
@@ -32,8 +32,6 @@ void TCPServer::Listen(void)
                Close();
                return;
        }
-
-       Start();
 }
 
 int TCPServer::ReadableEventHandler(const EventArgs& ea)
@@ -45,13 +43,6 @@ int TCPServer::ReadableEventHandler(const EventArgs& ea)
        fd = accept(GetFD(), (sockaddr *)&addr, &addrlen);
 
        if (fd == INVALID_SOCKET) {
-#ifdef _WIN32
-               if (WSAGetLastError() == WSAEWOULDBLOCK)
-#else /* _WIN32 */
-               if (errno == EINPROGRESS)
-#endif /* _WIN32 */
-                       return 0;
-
                SocketErrorEventArgs sea;
 #ifdef _WIN32
                sea.Code = WSAGetLastError();
index 73c7ff2aa20eb72eb3f3786f711a5b12c2b2d2fc..1e28bab7bbc605b85fa44f4ebe02081cbb74df6e 100644 (file)
@@ -5,7 +5,7 @@
 using namespace icinga;
 
 time_t Timer::NextCall;
-list<Timer::WeakPtr> Timer::Timers;
+Timer::CollectionType Timer::Timers;
 
 Timer::Timer(void)
 {
@@ -25,7 +25,7 @@ void Timer::RescheduleTimers(void)
        /* Make sure we wake up at least once every 30 seconds */
        NextCall = time(NULL) + 30;
 
-       for (list<Timer::WeakPtr>::iterator i = Timers.begin(); i != Timers.end(); i++) {
+       for (Timer::CollectionType::iterator i = Timers.begin(); i != Timers.end(); i++) {
                Timer::Ptr timer = i->lock();
 
                if (timer == NULL)
@@ -42,7 +42,7 @@ void Timer::CallExpiredTimers(void)
 
        time(&now);
 
-       for (list<Timer::WeakPtr>::iterator i = Timers.begin(); i != Timers.end(); ) {
+       for (Timer::CollectionType::iterator i = Timers.begin(); i != Timers.end(); ) {
                Timer::Ptr timer = Timer::Ptr(*i);
                i++;
 
@@ -58,7 +58,7 @@ void Timer::CallExpiredTimers(void)
 
 void Timer::StopAllTimers(void)
 {
-       for (list<Timer::WeakPtr>::iterator i = Timers.begin(); i != Timers.end(); ) {
+       for (Timer::CollectionType::iterator i = Timers.begin(); i != Timers.end(); ) {
                Timer::Ptr timer = i->lock();
 
                i++;
@@ -103,16 +103,18 @@ EventArgs Timer::GetUserArgs(void) const
 
 void Timer::Start(void)
 {
-       Stop();
-
-       Timers.push_front(static_pointer_cast<Timer>(shared_from_this()));
+       Timers.insert(static_pointer_cast<Timer>(shared_from_this()));
 
        Reschedule(time(NULL) + m_Interval);
 }
 
 void Timer::Stop(void)
 {
-       Timers.remove_if(weak_ptr_eq_raw<Timer>(this));
+       Timer::Ptr self = static_pointer_cast<Timer>(shared_from_this());
+       Timer::CollectionType::iterator i = Timers.find(self);
+
+       if (i != Timers.end())
+               Timers.erase(i);
 }
 
 void Timer::Reschedule(time_t next)
index 3e8c7c5554921795b2461067fce580781f12c245..22ee8c53daf6dc87916b9e67b3e12e3dbc4a12e0 100644 (file)
@@ -30,7 +30,9 @@ public:
        typedef shared_ptr<Timer> Ptr;
        typedef weak_ptr<Timer> WeakPtr;
 
-       static list<Timer::WeakPtr> Timers;
+       typedef set< Timer::WeakPtr, owner_less<Timer::WeakPtr> > CollectionType;
+
+       static Timer::CollectionType Timers;
 
        Timer(void);
 
index 15ce559b03661065d7e418701c0e4528fbd4683d..f1a203d27722bf9191647f9d118f95bb87c24ea7 100644 (file)
@@ -32,7 +32,7 @@ void VirtualEndpoint::ProcessRequest(Endpoint::Ptr sender, const JsonRpcRequest&
        map<string, Event<NewRequestEventArgs> >::iterator i = m_MethodHandlers.find(method);
 
        if (i == m_MethodHandlers.end())
-               throw InvalidArgumentException();
+               return;
 
        NewRequestEventArgs nrea;
        nrea.Source = shared_from_this();