#2974 select() loop notifys wrong fd's

obsolete: 8.4.8

On Sun 64 platforms the math for calculating the fd_set
bit is wrong.

bit = 1 << (fd%(NBBY*sizeof(fd_mask)));

sizeof(fd_mask) is 8, but sizeof(1) is 4. The easiest
fix for this is to change bit && "1" to unsigned long.
Note: this code pattern is copy/pasted throughout this
file, and all places need to be fixed. However, out of
curiosity, why aren't we using FD_SET/ISSET etc?


  • Kevin B KENNY

    Kevin B KENNY - 2004-11-23

    Logged In: YES

    The fact that we don't use FD_SET/FD_ISSET is
    quite an archaeism. At the time the code was
    written, there were still a fair number of non-POSIX
    operating systems out there that didn't have
    the FD_ macros.

    I'll have a look at this. FD_SET and FD_ISSET are
    clearly preferable if they work everywhere now
    (as I believe they do).

  • Kevin B KENNY

    Kevin B KENNY - 2004-11-24

    Logged In: YES

    On reading the code, it appears that the lack of
    a misguided attempt at performance enhancement, when the select
    masks from the subthreads are OR-ed together to form the select
    mask of the Notifier thread. While the FD_* code is ugly,
    it looks to
    be The Right Thing moving forward, at least until poll() is
    (or we introduce a compat/ version of it). The HEAD and the
    tip of
    the 8.4 branch now use the FD_* macros.

  • Kevin B KENNY

    Kevin B KENNY - 2004-11-24
    • status: open --> closed-fixed

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:

No, thanks