aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Christian Blichmann <cblichmann@google.com>2015-08-04 13:16:48 +0200
committerGravatar Christian Blichmann <cblichmann@google.com>2015-08-04 13:16:48 +0200
commite60c5e38106e85363ea0c6bba242e26f76681883 (patch)
tree72ce78574bfd578a3d92020f0bef2adfe64b86e2
parent32c4e5ee6b5368eb3815ff8ef21719a594d4b37d (diff)
Use an unsigned pointer compare, as the highest bit may sometimes be set.
This fixes intermittent connection issues on 32-bit Linux. Also related to issues #2557 and #2600.
-rw-r--r--src/core/iomgr/fd_posix.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/core/iomgr/fd_posix.c b/src/core/iomgr/fd_posix.c
index a2df838d4a..91051a178e 100644
--- a/src/core/iomgr/fd_posix.c
+++ b/src/core/iomgr/fd_posix.c
@@ -376,13 +376,15 @@ gpr_uint32 grpc_fd_begin_poll(grpc_fd *fd, grpc_pollset *pollset,
return 0;
}
/* if there is nobody polling for read, but we need to, then start doing so */
- if (read_mask && !fd->read_watcher && gpr_atm_acq_load(&fd->readst) > READY) {
+ if (read_mask && !fd->read_watcher &&
+ gpr_atm_acq_load((gpr_uintptr *)&fd->readst) > READY) {
fd->read_watcher = watcher;
mask |= read_mask;
}
/* if there is nobody polling for write, but we need to, then start doing so
*/
- if (write_mask && !fd->write_watcher && gpr_atm_acq_load(&fd->writest) > READY) {
+ if (write_mask && !fd->write_watcher &&
+ gpr_atm_acq_load((gpr_uintptr *)&fd->writest) > READY) {
fd->write_watcher = watcher;
mask |= write_mask;
}