diff options
author | Craig Tiller <ctiller@google.com> | 2015-07-01 13:54:28 -0700 |
---|---|---|
committer | Craig Tiller <ctiller@google.com> | 2015-07-01 13:54:28 -0700 |
commit | b1f220de6f8a50f9e36c57a25cf9123fcd025742 (patch) | |
tree | fb8cbba343375cb338aa6f8701843d233239a127 /src/core/iomgr | |
parent | 77f0461e3ff0c592788d689cbe1f2863beea5002 (diff) |
Delay unregister of fd until freelisted
Prevents a race whereby we start deleting the freelist before it's used
Diffstat (limited to 'src/core/iomgr')
-rw-r--r-- | src/core/iomgr/fd_posix.c | 2 |
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); |