diff --git a/src/core/iomgr/pollset_posix.c b/src/core/iomgr/pollset_posix.c
index b0404b870b5c300200ca84a1eb60dfcc2e726f2f..2837a0dff3ffd204809c6ffb4e5c4fd69e78e9ed 100644
--- a/src/core/iomgr/pollset_posix.c
+++ b/src/core/iomgr/pollset_posix.c
@@ -202,8 +202,15 @@ static void unary_poll_pollset_add_fd(grpc_pollset *pollset, grpc_fd *fd) {
   if (fd == pollset->data.ptr) return;
   fds[0] = pollset->data.ptr;
   fds[1] = fd;
-  grpc_platform_become_multipoller(pollset, fds, GPR_ARRAY_SIZE(fds));
-  grpc_fd_unref(fds[0]);
+  if (!grpc_fd_is_orphaned(fds[0])) {
+    grpc_platform_become_multipoller(pollset, fds, GPR_ARRAY_SIZE(fds));
+    grpc_fd_unref(fds[0]);
+  } else {
+    /* old fd is orphaned and we haven't cleaned it up until now, so remain a
+     * unary poller */
+    grpc_fd_unref(fds[0]);
+    pollset->data.ptr = fd;
+  }
 }
 
 static void unary_poll_pollset_del_fd(grpc_pollset *pollset, grpc_fd *fd) {