diff --git a/src/core/iomgr/ev_poll_and_epoll_posix.c b/src/core/iomgr/ev_poll_and_epoll_posix.c
index 080f22396ac333e3673b19b99a613d16636b40be..fd554107bf0e02e135d7bcf9c349387293aa1aa1 100644
--- a/src/core/iomgr/ev_poll_and_epoll_posix.c
+++ b/src/core/iomgr/ev_poll_and_epoll_posix.c
@@ -1336,7 +1336,7 @@ static void multipoll_with_poll_pollset_maybe_work_and_unlock(
 
   for (i = 2; i < pfd_count; i++) {
     grpc_fd *fd = watchers[i].fd;
-    pfds[i].events = (short)grpc_fd_begin_poll(fd, pollset, worker, POLLIN,
+    pfds[i].events = (short)fd_begin_poll(fd, pollset, worker, POLLIN,
                                                POLLOUT, &watchers[i]);
     GRPC_FD_UNREF(fd, "multipoller_start");
   }
diff --git a/src/core/iomgr/ev_poll_posix.c b/src/core/iomgr/ev_poll_posix.c
index 8878aa61bcad41bbddab96dee811522b5c7bfd7e..5cc5bc3c68fcb425d55df60250d011a3269f26a4 100644
--- a/src/core/iomgr/ev_poll_posix.c
+++ b/src/core/iomgr/ev_poll_posix.c
@@ -877,6 +877,7 @@ static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
         } else {
           pollset->fds[fd_count++] = pollset->fds[i];
           watchers[pfd_count].fd = pollset->fds[i];
+          GRPC_FD_REF(watchers[pfd_count].fd, "multipoller_start");
           pfds[pfd_count].fd = pollset->fds[i]->fd;
           pfds[pfd_count].revents = 0;
           pfd_count++;
@@ -890,8 +891,10 @@ static void pollset_work(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset,
       gpr_mu_unlock(&pollset->mu);
 
       for (i = 2; i < pfd_count; i++) {
-        pfds[i].events = (short)fd_begin_poll(watchers[i].fd, pollset, &worker,
-                                              POLLIN, POLLOUT, &watchers[i]);
+        grpc_fd *fd = watchers[i].fd;
+        pfds[i].events = (short)fd_begin_poll(fd, pollset, &worker, POLLIN,
+                                                   POLLOUT, &watchers[i]);
+        GRPC_FD_UNREF(fd, "multipoller_start");
       }
 
       /* TODO(vpai): Consider first doing a 0 timeout poll here to avoid