From 76fa73d9eda02c17cde0ef739bb5b4f4234d16e5 Mon Sep 17 00:00:00 2001 From: Jay Lan Date: Thu, 25 Mar 2010 13:31:10 -0400 Subject: 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 Signed-off-by: Chuck Lever Signed-off-by: Steve Dickson --- src/svc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/svc.c b/src/svc.c index cc65e6a..b4a63d0 100644 --- a/src/svc.c +++ b/src/svc.c @@ -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; -- cgit v1.2.1