Hi,

Anyone can explain the purpose of add_ring in Solaris
port.c and its usage during pollset_add/pollset_wait


Current behavior is different from other implementations
in such way that adding faulty sockets (e.g. shutdown)
to the pollset behaves randomly depending on the state at
which currently the pollset is.

a.) If the pollset is currently in the pollset_poll
    state adding fault socket will fail.
b.) If the pollset is NOT in the poll call, the socket
    is added to the add_ring and OK is returned !?
    Next call to poll calls port_associate for that socket
    and if one fails, all other in the queue are skipped.
    Fault cause pollset_add returned OK for all of them!
    Also the return error is for poll_add not for poll.

Any technical reason why we can't call port_associate
always during pollset_add instead just if its executing
port_getn? I mean I would expect at least otherwise, but
it seems port_getn and port_associate can be called
concurrently, so cannot get the need for an additional
queue.



Cheers
--
^TM

Reply via email to