|
|
@ -1533,6 +1533,7 @@ static void pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, |
|
|
|
|
|
|
|
|
|
|
|
polling_island *pi_new = NULL; |
|
|
|
polling_island *pi_new = NULL; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
retry: |
|
|
|
/* 1) If fd->polling_island and pollset->polling_island are both non-NULL and
|
|
|
|
/* 1) If fd->polling_island and pollset->polling_island are both non-NULL and
|
|
|
|
* equal, do nothing. |
|
|
|
* equal, do nothing. |
|
|
|
* 2) If fd->polling_island and pollset->polling_island are both NULL, create |
|
|
|
* 2) If fd->polling_island and pollset->polling_island are both NULL, create |
|
|
@ -1550,7 +1551,12 @@ static void pollset_add_fd(grpc_exec_ctx *exec_ctx, grpc_pollset *pollset, |
|
|
|
if (fd->polling_island == pollset->polling_island) { |
|
|
|
if (fd->polling_island == pollset->polling_island) { |
|
|
|
pi_new = fd->polling_island; |
|
|
|
pi_new = fd->polling_island; |
|
|
|
if (pi_new == NULL) { |
|
|
|
if (pi_new == NULL) { |
|
|
|
|
|
|
|
gpr_mu_unlock(&fd->mu); |
|
|
|
pi_new = polling_island_create(exec_ctx, fd, &error); |
|
|
|
pi_new = polling_island_create(exec_ctx, fd, &error); |
|
|
|
|
|
|
|
gpr_mu_lock(&fd->mu); |
|
|
|
|
|
|
|
if (fd->polling_island != NULL) { |
|
|
|
|
|
|
|
goto retry; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
GRPC_POLLING_TRACE( |
|
|
|
GRPC_POLLING_TRACE( |
|
|
|
"pollset_add_fd: Created new polling island. pi_new: %p (fd: %d, " |
|
|
|
"pollset_add_fd: Created new polling island. pi_new: %p (fd: %d, " |
|
|
|