]> granicus.if.org Git - icinga2/commitdiff
Avoid unnecessary new/deletes
authorGunnar Beutner <gunnar@beutner.name>
Mon, 1 Feb 2016 08:33:33 +0000 (09:33 +0100)
committerGunnar Beutner <gunnar@beutner.name>
Tue, 23 Feb 2016 08:32:37 +0000 (09:32 +0100)
refs #11014

lib/base/socketevents.cpp

index e9613cc91f8b224ac25e167e99a39a3caad6f501..49834cdc98af86bbef20da82e0e12b9671b0e559 100644 (file)
@@ -80,18 +80,16 @@ void SocketEvents::ThreadProc(void)
 {
        Utility::SetThreadName("SocketIO");
 
-       pollfd *pfds = NULL;
-       SocketEventDescriptor *descriptors = NULL;
-       int pfdcount;
+       std::vector<pollfd> pfds;
+       std::vector<SocketEventDescriptor> descriptors;
 
        for (;;) {
                {
                        boost::mutex::scoped_lock lock(l_SocketIOMutex);
 
-                       if (pfds == NULL) {
-                               pfdcount = l_SocketIOSockets.size();
-                               pfds  = new pollfd[pfdcount];
-                               descriptors = new SocketEventDescriptor[pfdcount];
+                       if (l_SocketIOFDChanged) {
+                               pfds.resize(l_SocketIOSockets.size());
+                               descriptors.resize(l_SocketIOSockets.size());
 
                                int i = 0;
 
@@ -111,10 +109,12 @@ void SocketEvents::ThreadProc(void)
                        }
                }
 
+               ASSERT(!pfds.empty());
+
 #ifdef _WIN32
-               (void) WSAPoll(pfds, pfdcount, -1);
+               (void) WSAPoll(&pfds[0], pfds.size(), -1);
 #else /* _WIN32 */
-               (void) poll(pfds, pfdcount, -1);
+               (void) poll(&pfds[0], pfds.size(), -1);
 #endif /* _WIN32 */
 
                std::vector<EventDescription> events;
@@ -122,14 +122,10 @@ void SocketEvents::ThreadProc(void)
                {
                        boost::mutex::scoped_lock lock(l_SocketIOMutex);
 
-                       if (l_SocketIOFDChanged) {
-                               delete [] pfds;
-                               delete [] descriptors;
-                               pfds = NULL;
+                       if (l_SocketIOFDChanged)
                                continue;
-                       }
 
-                       for (int i = 0; i < pfdcount; i++) {
+                       for (int i = 0; i < pfds.size(); i++) {
                                if ((pfds[i].revents & (POLLIN | POLLOUT | POLLHUP | POLLERR)) == 0)
                                        continue;