diff options
author | Jay Lan <jlan@sgi.com> | 2010-03-25 13:31:10 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2010-03-25 13:31:10 -0400 |
commit | 76fa73d9eda02c17cde0ef739bb5b4f4234d16e5 (patch) | |
tree | 732e19f20bd81e33c05cb2f2ca71ae8952c0e98b | |
parent | cd1401995457316ccab5f7d2a9e31237c5c3273f (diff) | |
download | ti-rpc-76fa73d9eda02c17cde0ef739bb5b4f4234d16e5.tar.gz |
Support 64-bit bit mask operations in svc_getreqset()
fd_mask is defined as a long int. On 64-bit platforms, longs
are 64 bits wide, so bit mask operations like ffs() do not
work as expected.
Glibc 2.3 and earlier also had this bug.
See:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=413450
Reported-by: Jens-Uwe Mozdzen <jmozdzen@nde.de
Fix-by: Jay Lan <jlan@sgi.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r-- | src/svc.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -615,7 +615,7 @@ svc_getreqset (readfds) maskp = readfds->fds_bits; for (sock = 0; sock < FD_SETSIZE; sock += NFDBITS) { - for (mask = *maskp++; (bit = ffs (mask)) != 0; mask ^= (1 << (bit - 1))) + for (mask = *maskp++; (bit = ffsl(mask)) != 0; mask ^= (1L << (bit - 1))) { /* sock has input waiting */ fd = sock + bit - 1; |