aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2015-07-01 13:54:28 -0700
committerGravatar Craig Tiller <ctiller@google.com>2015-07-01 13:54:28 -0700
commitb1f220de6f8a50f9e36c57a25cf9123fcd025742 (patch)
treefb8cbba343375cb338aa6f8701843d233239a127 /src
parent77f0461e3ff0c592788d689cbe1f2863beea5002 (diff)
Delay unregister of fd until freelisted
Prevents a race whereby we start deleting the freelist before it's used
Diffstat (limited to 'src')
-rw-r--r--src/core/iomgr/fd_posix.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/core/iomgr/fd_posix.c b/src/core/iomgr/fd_posix.c
index d12974cf3c..bcc11f91b7 100644
--- a/src/core/iomgr/fd_posix.c
+++ b/src/core/iomgr/fd_posix.c
@@ -74,6 +74,7 @@ static void freelist_fd(grpc_fd *fd) {
gpr_mu_lock(&fd_freelist_mu);
fd->freelist_next = fd_freelist;
fd_freelist = fd;
+ grpc_iomgr_unregister_object(&fd->iomgr_object);
gpr_mu_unlock(&fd_freelist_mu);
}
@@ -139,7 +140,6 @@ static void unref_by(grpc_fd *fd, int n) {
#endif
old = gpr_atm_full_fetch_add(&fd->refst, -n);
if (old == n) {
- grpc_iomgr_unregister_object(&fd->iomgr_object);
freelist_fd(fd);
} else {
GPR_ASSERT(old > n);