Avoid possible duplicate fds in the list
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Tue, 24 Jul 2012 04:22:13 +0000 (00:22 -0400)
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Tue, 24 Jul 2012 04:29:19 +0000 (00:29 -0400)
mono/metadata/tpool-poll.c

index 7a766771e8991340332319c43af88769cfd54a1e..e03eca5248cc4c4a0f36bb374064bf2eebab1258 100644 (file)
@@ -216,11 +216,22 @@ tp_poll_wait (gpointer p)
                /* Got a new socket */
                if ((pfds->revents & MONO_POLLIN) != 0) {
                        int nread;
+                       gboolean found = FALSE;
 
                        for (i = 1; i < allocated; i++) {
                                pfd = &pfds [i];
-                               if (pfd->fd == -1 || pfd->fd == data->newpfd.fd)
+                               if (pfd->fd == data->newpfd.fd) {
+                                       found = TRUE;
                                        break;
+                               }
+                       }
+
+                       if (!found) {
+                               for (i = 1; i < allocated; i++) {
+                                       pfd = &pfds [i];
+                                       if (pfd->fd == -1)
+                                               break;
+                               }
                        }
 
                        if (i == allocated) {